0

我已经用 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 中加上一些常数。其他的逻辑相同)。

现在这是我的困惑。如果我将翻译放在首位,则移动方法可以正常工作(向内、向左等),但旋转是错误的。(整个世界围绕原点旋转)另一方面,如果我先旋转,相机旋转很好,但移动方法不正确。例如 moveIn() 总是在同一行/轴上移动。但我想通过不在 z 轴上移动

我应该怎么办?

4

1 回答 1

1

在这种情况下,您必须先应用旋转,然后再进行平移。请记住,矩阵运算是不可交换的。是 FPS 相机的简单示例。这个线程也很有帮助。

于 2013-01-01T13:34:39.723 回答