0

我正在制作一个 3d 游戏LWJGL。在这个游戏中,每当我按下箭头键时,我都希望屏幕朝那个方向旋转,而不管当前方向如何。我正在努力在代码中实现这一点。使用基于旋转向量 3f 的三个glRotatef函数并不能做到这一点。上下旋转工作,因为glRotatef(rotation.x, 1, 0, 0)首先被调用,但只有当你不向上或向下看时,左右才有效。如果是,则围绕通用 y 轴旋转,然后相机旋转。我看到另一个实现可以使用gluLookAt(),但我想我会遇到同样的问题。

编辑 我认为我通过改变调用 glRotatef() 的顺序来解决我的问题,具体取决于我想要旋转的方向。我认为这会起作用,因为在我的游戏中,我一次只会旋转一个轴。它在某种程度上起作用,但在某些方向上却没有。

      if(updown){
             glRotatef(rotation.x, 1, 0, 0);
             glRotatef(rotation.y, 0, 1, 0);
        } else if(leftright){
             glRotatef(rotation.y, 0, 1, 0);
             glRotatef(rotation.x, 1, 0, 0);
        }
        glTranslatef(position.x, position.y, position.z);
4

2 回答 2

0

gluLookAt 可能会让您更快地到达那里,但您需要手动围绕原点坐标旋转眼睛坐标。使用 gluLookAt 如果您计划围绕所有 3 个轴旋转,您还需要计算一个向上向量。

我有一种预感,您只需要在执行 glRotate 之前添加一个 glTranslate ,以便相机可以绕着轨道运行。

如果您显示一些代码,您可能会获得更多帮助。

于 2013-03-28T03:20:53.900 回答
0

我已经解决了这个问题并继续前进。因为我一次只将一个轴旋转 90 度,所以我遍历了所有 64 个可能的方向并手动应用了必要的转换。

于 2013-03-30T20:57:31.377 回答