在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,y
或z
旋转(+/-)90 deg
以匹配此:
Z
-axis 向前(或向后取决于您的投影矩阵和深度函数)
X
-axis 是对的
Y
-axis 向上
相对于您的相机/屏幕坐标系(投影矩阵)。然后翻译到后面的位置
应用POV
旋转(可选)
如果您可以从正向(鼠标注视)稍微旋转相机视图,那么在这一步进行
camera*=rotation_POV
将矩阵转换为相机
相机矩阵通常是它所代表的坐标系矩阵的逆:
camera=Inverse(camera)
欲了解更多信息,请查看此处understanding transform matrices,其中包含 C++ 中的 OpenGL 逆矩阵计算。
【讨论】:
以上是关于在OpenGL中沿对象后面的方向旋转相机的主要内容,如果未能解决你的问题,请参考以下文章