OpenGL:glRotate:确定'angle'组件

时间:2011-04-09 20:55:07

标签: math opengl

我需要一些数学和OpenGL的帮助。

我想让一些物体跟随另一个物体,也就是说,每当前者移动时,将其脸转向另一个物体。所以我了解了glRotate。

我以为每次移动时我都会获得前者的(x,y,z),然后将其坐标发送到另一个函数,该函数应该更新后者的“面向”属性。但是,如何根据跟随对象的新旧方向找到glRotate的'angle'参数?

非常感谢任何帮助。谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

假设您的观察者位于0,0,0并且您的目标位置O和新目标位置N

然后以弧度为单位围绕Y轴的角度差为:

float angle = atan2(N.z,N.x) - atan2(O.z,O.x);

由于glRotate接受度数,您希望将其转换为度数:

angle = (angle * 180.f)/M_PI;

这是如何工作的?您将两个向量投影到XZ平面。我只是忽略了x组件。然后你将它们的角度分别对应X轴(那个arctan就是这样)并采取差异。

编辑:修正角度计算,感谢ja72指出它是灾难性的破坏。