在JOGL中进行翻译后,无法按预期使用glLoadIdentity

时间:2011-09-30 04:36:57

标签: java opengl jogl

我刚开始使用JOGL,而且还有一些我无法做到的事情:NeHe tutorials中有一个基本绘图和旋转的例子,一切正常,但{{1}除外在第一个三角形之后和下一个四边形之前使用。 JOGL代码是下一个:

glLoadIdentity();

如您所见,在定义Quad之前有一个float rtri = 0.0f; float rquad = 0.0f; @Override public void display(GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); gl.glTranslatef(-1.5f,0.0f,-6.0f); gl.glRotatef(rtri, 0.0f, 1.0f, 0.0f); gl.glBegin(GL2.GL_TRIANGLES); { gl.glColor3f(1.0f,0.0f,0.0f); gl.glVertex3f( 0.0f, 1.0f, 0.0f); gl.glColor3f(0.0f,1.0f,0.0f); gl.glVertex3f(-1.0f,-1.0f, 0.0f); gl.glColor3f(0.0f,0.0f,1.0f); gl.glVertex3f( 1.0f,-1.0f, 0.0f); } gl.glEnd(); // Here seems to be the problem gl.glLoadIdentity(); gl.glTranslatef(3.0f, 0.0f, 0.0f); gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f); gl.glBegin(GL2.GL_QUADS); { gl.glColor3f(0.5f, 0.5f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 0.0f); gl.glVertex3f( 1.0f, 1.0f, 0.0f); gl.glVertex3f( 1.0f,-1.0f, 0.0f); gl.glVertex3f(-1.0f,-1.0f, 0.0f); } gl.glEnd(); gl.glFlush(); rtri += 0.15f; rquad -= 0.5f; } 。如果这一行被注释,最后的程序会渲染第一个三角形旋转,四边形围绕三角形进行平移,但四边形也有自己的旋转。

如果没有注释该行,则根本不渲染四边形,只渲染三角形,并定义颜色和旋转。

我到目前为止看到的所有示例似乎都使用gl.glLoadIdentity();来恢复当前矩阵模式(GL_MODELVIEW)的默认状态,但在这种情况下,似乎还会发生其他事情。

我在每次绘图操作之前使用gl.glLoadIdentity();gl.glPushMatrix();进行了测试,围绕所有绘图代码,中间有gl.glPopMatrix();,但没有任何帮助。< / p>

我已经检查了其他示例'init和reshape方法,但一切似乎都很好:

gl.glLoadIdentity();

我想继续学习OpenGL,同时使用Java(我喜欢Java,很久以前我不使用C ++),但我应该是OpenGL的基础知识,并且我不想继续错过这样一个“基本”的东西。谢谢大家的帮助,对不起,如果我的英语有错误。

1 个答案:

答案 0 :(得分:2)

您的问题不是glLoadIdentity。你的问题是:

gl.glTranslatef(3.0f, 0.0f, 0.0f);
gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f);

您可以在X方向上平移四个单位。好的,但它的Z值仍为零。由于您在相机空间中操作,因此相机的Z值也为零。而且由于你的近Z是1,你将要剪掉很多相机。

另外,有一个事实是,鉴于您的FOV为50度,以及您将四个单位放在X方向的事实,它可能位于相机的右侧。所以它只是在视野之外。

如果您想看到物体,则需要将物体移离相机。