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); }
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();
如果我把代码放在display()中,我得到一个正方形,除了在if条件下检查代码是否已进入第一次显示的条件中的glutSwapBuffers()。如果我删除if,我会得到一个白色的窗口
答案 0 :(得分:1)
在你的glTranslatef(0.0f, 0.0f, -5.0f)
函数中添加额外的display
,将所有5个单位推回到场景中,否则你将看不到你在原点绘制的内容。
顺便说一句,行glScalef(1.0,1.0,1.0)
没有做任何事情,删除它以避免不必要的计算。
修改强>: OpenGL中没有“眼睛”。更具体地说,它始终固定在(0,0,0)向下看负z轴。您必须使用眼转换的反转来移动整个场景。您可以手动移动场景以便眼睛可以看到它,或使用 gluLookAt ,您可以在其中指定“眼睛”,但在背景中它只是转换场景,因此固定的“眼睛”可以看到它。
进一步阅读:http://www.opengl.org/archives/resources/faq/technical/viewing.htm