我正在OpenGL中制作一个游戏,使用freeglut。
我有一辆车,我可以使用按键前后移动,相机会跟随它。现在,当我转动汽车(在xz平面中的glRotate)时,我希望相机改变相机的位置(使用gluLookAt),使其始终指向汽车的后部。
有什么建议吗?
对于相机跟随,我使用对象变换矩阵
-
获取对象变换矩阵
camera=object
对使用
glGetMatrix
或其他 -
移位旋转位置,使
Z
轴指向您想要查看的位置我使用对齐的对象在
Z
轴上向前,但不是所有的网格模型都是这样的,所以通过(+/-)90 deg
围绕x,y
或z
旋转以匹配这一点:Z
-轴是向前的(或向后取决于投影矩阵和深度函数)X
-轴为右Y
-轴向上
相对于您的相机/屏幕坐标系(投影矩阵)。然后转换到后面的位置
-
应用
POV
旋转(可选)如果你可以从向前的方向(鼠标看)稍微旋转相机视图,然后在这个步骤
camera*=rotation_POV
-
将矩阵转换为相机
相机矩阵通常是它所代表的坐标系矩阵的倒数,因此:
camera=Inverse(camera)
有关更多信息,请参阅此处了解变换矩阵,其中包括C++中的OpenGL逆矩阵计算。