我在OpenGL中渲染立方体时遇到了问题。我正在绘制两个立方体,一个是线框立方体,围绕原点居中,而另一个则偏离原点且为实心。我映射了一些键以使物体相对于原点旋转一定角度,因此整个场景可以围绕原点旋转。
问题是,在渲染场景时,当线框立方体应该在其它实心立方体的前面时,它不能正确地显示自己。
此外,该立方体的行为不正确。
问题是,在渲染场景时,当线框立方体应该在其它实心立方体的前面时,它不能正确地显示自己。
此外,该立方体的行为不正确。
在我围绕x轴(当前水平线)稍微旋转一下之后,这个立方体出现了缺失的面并且无法正确渲染。我做错了什么?
我已经编写了以下代码。 请注意,rotateX、rotateY和rotateZ被映射到键,并且是我的全局旋转变量。
//The Initialize function, called once:
void Init(){
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Depth Buffer Setup // Enables Depth Testing
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
glEnable(GL_LIGHTING);
}
void draw(){
//The main draw function
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity ();
gluPerspective(45, 640/480.0, .5, 100);
glMatrixMode(GL_MODELVIEW); //select the modelview matrix.
glLoadIdentity ();
gluLookAt(0,0,5,
0,0,0,
0,1,0);
glRotatef(rotateX,1,0,0);
glRotatef(rotateY,0,1,0);
glRotatef(rotateZ,0,0,1);
drawScene(); // this just draws the main axis lines,
glutWireCube(1);
glPopMatrix();
glPushMatrix();
glTranslatef(-2,1,0);
drawNiceCube();
glPopMatrix();
glutSwapBuffers();
}
drawNiceCube()的代码只是使用了GL_QUADS,而drawWireCube则是在GLUT中内置的。
编辑: 我已经在http://pastebin.com/p1kwPjEM上发布了完整的代码,如果没有很好的文档说明,我很抱歉。