Java OpenGl旋转立方体问题!

好的,所以我成功学会了如何将纹理绑定到四边形,并显示这个很酷的箱子。 但是,当我旋转立方体出事了。 在旋转过程中,立方体的背面覆盖正面并出现在正面的前面。 左右脸也是如此。 他们相互叠加,给人一种奇怪的感觉。 我不知道为什么会发生这种情况。 这里是我只画四个面(前,后,右,左)的代码。

gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); // clear the screen and depth buffers gl.glLoadIdentity(); // reset the current modelview matrix // draw quad gl.glTranslatef(0.0f, 0.0f, -6.0f); // translate to the left and into the screen gl.glRotatef(rotateAngle, 0.0f, 1.0f, 0.0f); // rotate triangle around the y-axis gl.glBindTexture(GL2.GL_TEXTURE_2D, textures[2]); // bind the texture you want to use to gl_texture_2d gl.glBegin(GL2.GL_QUADS); // front face gl.glTexCoord2f(0.0f, 1.0f); // bottom left gl.glVertex3f(-1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 1.0f); // bottom right gl.glVertex3f(1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 0.0f); // top right gl.glVertex3f(1.0f, 1.0f, 1.0f); gl.glTexCoord2f(0.0f, 0.0f); // top left gl.glVertex3f(-1.0f, 1.0f, 1.0f); // right face gl.glTexCoord2f(0.0f, 1.0f); // bottom left gl.glVertex3f(1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 1.0f); // bottom right gl.glVertex3f(1.0f, -1.0f, -1.0f); gl.glTexCoord2f(1.0f, 0.0f); // top right gl.glVertex3f(1.0f, 1.0f, -1.0f); gl.glTexCoord2f(0.0f, 0.0f); // top left gl.glVertex3f(1.0f, 1.0f, 1.0f); // left face gl.glTexCoord2f(0.0f, 1.0f); // bottom left gl.glVertex3f(-1.0f, -1.0f, -1.0f); gl.glTexCoord2f(1.0f, 1.0f); // bottom right gl.glVertex3f(-1.0f, -1.0f, 1.0f); gl.glTexCoord2f(1.0f, 0.0f); // top right gl.glVertex3f(-1.0f, 1.0f, 1.0f); gl.glTexCoord2f(0.0f, 0.0f); // top left gl.glVertex3f(-1.0f, 1.0f, -1.0f); // back face gl.glTexCoord2f(0.0f, 1.0f); // bottom left gl.glVertex3f(-1.0f, -1.0f, -1.0f); gl.glTexCoord2f(1.0f, 1.0f); // bottom right gl.glVertex3f(1.0f, -1.0f, -1.0f); gl.glTexCoord2f(1.0f, 0.0f); // top right gl.glVertex3f(1.0f, 1.0f, -1.0f); gl.glTexCoord2f(0.0f, 0.0f); // top left gl.glVertex3f(-1.0f, 1.0f, -1.0f); gl.glEnd(); 

而且,我绘制纹理然后顶点的方式对我来说还不是很清楚。 根据我读过的左下角(0,0)是纹理开始绘制的位置,所以我也应该从左下角开始绘制我的四边形。 我尝试过,但没有奏效。 纹理被绘制,但是朝上。 所以我不得不经历一些试验和错误,直到我得到正确的绘制纹理。 我希望我可以附上一个图片到这个post,所以我可以告诉你如何在旋转过程中立方体的背面覆盖前面的一个,但我认为这个设施不提供堆栈交换。 谢谢。

我想出了这个问题! 起初我以为这是一个驱动程序的问题,因为我使用像这样的Mac OS X http://forum.jogamp.org/Depth-buffer-not-working-on-Win7-64b-td1737435.html,但后来我试过它在64位窗口和发生同样的问题。 最后,我发现这是由于gluProspective()造成的代码问题。 我没有正确设置zNear我应该有glu.gluPerspective(45.0f,(float)width / height,1.0f,100.0f)而不是glu.gluPerspective(45.0f,(float)width / height,0.0f,100.0 F)。 因为opengl期望zNear永远是正面的。 希望这会帮助其他面临同样问题的初学者。

是深度testing启用和保存? 初始化时需要下面的代码:

 gl.glClearDepth(1.0f); gl.glEnable(GL.GL_DEPTH_TEST); gl.glDepthFunc(GL.GL_LEQUAL);