当前位置: 首页 > 知识库问答 >
问题:

我的display()函数只在第一次进入时才显示。然后显示一个空白窗口

欧阳安晏
2023-03-14

void init(void)
{ 
    glEnable(GL_DEPTH_TEST);
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}

void display(void){glClearColor(1.0,1.0,1.0,1.0);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glScalef(1.0,1.0,1.0);
glColor3f(0.0,0.0,0.0);
    glBegin(GL_POLYGON);
    glVertex2f(-0.5, -0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(0.5, 0.5);
    glVertex2f(0.5, -0.5);
glEnd();
    glutSwapBuffers();

}

void reshape(int w,int h){int height=h;int width=w;glViewport(0,0,(GLsizei)w,(GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(60,(GLfloat)w/(GLfloat)h,1.0,100.0);glMatrixMode(GL_MODELVIEW);}

int main(int argc,char*argv[]){Complex c(0,0);glutInit(&argc,argv);glutInitDisplayMode(GLUT_DOUBLE GLUT_RGBA glut_dept);glutinitWindowssize(512,512);glutInitWindowPosition(100,100);winID=glutCreateWindow(“分形”);init();glutDisplayFunc(显示);glutDisplayFunc(显示);glutDisplayFunc(重塑);//在此处计算更新

如果我把代码放在display()中,我会得到一个正方形,除了glutSwapBuffers()在if条件中检查代码是否第一次进入display。如果我移除If,我会得到一个白色窗口


共有1个答案

向弘懿
2023-03-14

display函数中添加一个额外的gltranslatef(0.0f,0.0f,-5.0f),将所有5个单元推回到场景中,否则将无法看到原点处所绘制的内容。

顺便说一句,行glscalef(1.0,1.0,1.0)不能做任何事情,删除它以避免不必要的计算。

编辑:OpenGL中没有“眼睛”。更具体地说,它总是固定在(0,0,0)向下看负z轴。你必须用眼睛转换的反向移动整个场景。您可以手动移动场景,这样您的眼睛就可以看到它,或者使用gluLookAt,在那里您可以指定“眼睛”,但在背景中,它只是转换场景,这样固定的“眼睛”就可以看到它。

进一步阅读:http://www.opengl.org/archives/resources/faq/technical/viewing.htm

 类似资料:
  • 我在这里遵循GLUT教程。我将第一个示例“YAT”复制并粘贴到xcode中,稍微修改了包含,发现出现了一个空白窗口。未修改的代码设置为显示线框茶壶。对我来说,这不会发生。 但是,如果我取消对创建金牛座的注释,则金牛座和茶壶的一部分会出现在窗口中。在//draw下,似乎还有一些随机的非注释行和注释行的组合,它们实际上会导致对象出现……或者只是一个空白屏幕。 P、 我知道每个人都说不要使用GLUT,但

  • 这是我的代码,请记住,我在几天前学习了python,所以我的代码可能制作不正确,等等。我正在尝试制作一个窗口,该窗口将显示一些文本(测试版),并将显示两个小矩形,我想成为按钮。

  • void display(string template [, string cache_id [, string compile_id]]) This displays the template. Supply a valid template resource type and path. As an optional second parameter, you can pass a cach

  • 我试图在一个Jasper报告中显示多个表,我使用子报告来实现这个功能。但我一直在显示几个子报告。实际上,只显示其中一个(第一个)。 以下是我的主report.jrxml: 下面是subjectSubreport.jrxml: 这是printersSubreport.jrxml: 当我切换子报告时,第一个报告正确显示,另一个报告消失。在JasperSoft Studio中,一切都很好,当我将它们导出

  • 我下载从https://www.adminer.org/#download这只是一个PHP文件约大小。我把这个放在/localhost/,并且能够登录到数据库没有任何问题。但唯一的问题是,我有大约24个数据库,管理员只显示1个数据库的表和内容。 这个数据库碰巧也是第一个索引的数据库,因为它以字母所以我猜它只是在抓取它,但这不是我想要获取的数据库。有什么解决办法吗?

  • 问题内容: 我正在尝试制作一个程序,一次显示3个框。我以为,如果您为设置一个类,它将每秒显示一个新框。 所以这是我想出的代码: } 它有效,但不是我想要的方式。在上一个按ok之后,它每秒显示一个新框,而不是每秒显示一个新框。 因此,当我按下“按下”键时,它会等待1秒钟并产生一个盒子。当我按“确定”时,它会等待1秒钟并生成另一个,依此类推。知道如何使3个盒子接连产生1个吗? 问题答案: 使用JOpt