在OpenGL中沿对象后面的方向旋转相机

Posted

技术标签:

【中文标题】在OpenGL中沿对象后面的方向旋转相机【英文标题】:Rotate Camera in the Direction behind object in OpenGL 【发布时间】:2013-11-25 03:33:10 【问题描述】:

我正在使用 freeglut 在 OpenGL 中制作游戏。

我有一辆车,我可以使用按键来回移动它,并且相机会跟随它。现在,当我转动汽车时(glRotate in xz plane),我希望相机改变相机位置(使用 gluLookAt),使其始终指向汽车的后部。

有什么建议吗?

【问题讨论】:

摄像头总是指向车尾……难道摄像头也需要跟车? IE。摄像头应该留在车后吗? 是的,这正是我想要做的。我尝试操纵方向向量(sin/cos)的值,​​但我对此了解不多,所以我不确定。如果您对此有任何建议,请告诉我,我可以再次尝试解决。谢谢! 看看msdn.microsoft.com/en-us/library/…。虽然它是 C#/XNA,但它会让您了解这背后的数学 - 毕竟,相机就是关于数学和转换顺序的。 【参考方案1】:

对于相机跟随我使用对象变换矩阵

    获取对象变换矩阵

    camera=object
    

    使用glGetMatrix 或其他任何方式

    shift 旋转位置,使Z 轴指向您想要查看的位置

    我使用对象在Z 轴上向前对齐,但并非所有网格模型都是这样,所以围绕x,yz 旋转(+/-)90 deg 以匹配此:

    Z-axis 向前(或向后取决于您的投影矩阵和深度函数) X-axis 是对的 Y-axis 向上

    相对于您的相机/屏幕坐标系(投影矩阵)。然后翻译到后面的位置

    应用POV 旋转(可选)

    如果您可以从正向(鼠标注视)稍微旋转相机视图,那么在这一步进行

    camera*=rotation_POV
    

    将矩阵转换为相机

    相机矩阵通常是它所代表的坐标系矩阵的逆:

    camera=Inverse(camera)
    

欲了解更多信息,请查看此处understanding transform matrices,其中包含 C++ 中的 OpenGL 逆矩阵计算。

【讨论】:

以上是关于在OpenGL中沿对象后面的方向旋转相机的主要内容,如果未能解决你的问题,请参考以下文章

Java OpenGL - 如何使对象随相机旋转?

OpenGL模拟波斯王子相机

在 3d 中沿贝塞尔路径移动对象:旋转问题

OpenGL 方向。 (从负 z 看的身份旋转)

如何在 C++ 中使用 sdl、opengl 移动相机时修复奇怪的相机旋转

OpenGL,第一人称相机翻译