glRotatef移动轴

时间:2014-01-24 08:46:09

标签: c++ opengl

我第一次尝试使用OpenGL,所以我想编写一个显示一个框的简单程序,然后让我移动相机。

由于OpenGL中没有相机这样的东西,我只是通过让整个世界以完全相反的方式移动来模拟我想要的每一个“相机运动”。它一直顺利,直到轮换。

每当我旋转世界(glRotatef(10, 0, 1, 0);)时,轴也会旋转,所以当我尝试应用其他变换时,例如(glTranslatef(0, 0, -10);),这将转移世界离摄像机越近,它现在朝着完全不同的方向移动。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

首先,您可以使用矩阵来累积相机的变换,就像OpenGL一样。

但是不使用glRotate或glTransform,你可以使用矢量数学库(即:GLM)并在矩阵变量上应用模拟运算(即:glm :: rotate,glm :: translate)(即:glm :: mat4)你会调用相机对象的“局部变换”。

每当你想在不同的空间上应用变换(即:(1,0,0)(0,1,0)(0,0,-1))你只需使用一个普通的新矩阵(就像glPopMatrix一样)会做什么),你会称之为“世界变革”。

在每个帧的末尾,您将乘以两个矩阵(local * world)并使用此结果为视图矩阵提供OpenGL(即:glMatrixMode(GL_MODELVIEW); glLoadMatrix(&(local * world)[0] );)

哦,不要忘记在帧结束时重置'世界变换'矩阵。