我刚开始使用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的基础知识,并且我不想继续错过这样一个“基本”的东西。谢谢大家的帮助,对不起,如果我的英语有错误。
答案 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方向的事实,它可能位于相机的右侧。所以它只是在视野之外。
如果您想看到物体,则需要将物体移离相机。