OpenGL - 混淆基于以前转换的转换

时间:2013-01-01 09:01:16

标签: opengl-es transformation

我已经通过openGL ES 1.1编写了一个简单的程序,在android上绘制了能够在空间中导航的3D对象。

我想像3D游戏中的第一人称相机模式一样向左,向右,向内,向外和向左,向右,向上,向下旋转。 (这意味着我想旋转相机/眼睛本身) 这是onDrawFrame(GL10 gl)中的绘图部分:

    gl.glLoadIdentity();
    gl.glRotatef(lfRt, 0.0f, 1.0f, 0.0f);
    gl.glRotatef(upDn, 1.0f, 0.0f, 0.0f);
    gl.glTranslatef(X, 0.0f, 0.0f);
    gl.glTranslatef(0.0f, Y, 0.0f);
    gl.glTranslatef(0.0f, 0.0f, Z);

lfRt和其他变量决定了我们必须存在的观点。 (为了描述更多,每次moveIn()调用都会使z加上一些常量。其他的则具有相同的逻辑)。

现在这是我的困惑。如果我首先放置翻译,移动方法可以正常工作(in,left等),但旋转是错误的。 (整个世界围绕原点旋转) 另一方面,如果我先放旋转,相机旋转正常,但移动方法不正确。例如,moveIn()始终在同一行/轴上移动。但我想继续前进,不要在z轴上移动

我该怎么办?

1 个答案:

答案 0 :(得分:1)

你必须首先应用旋转,然后在这种情况下进行翻译。记住,矩阵操作是非交换的。Here是FPS摄像机的一个简单例子。This线程也很有帮助