我需要一些数学和OpenGL的帮助。
我想让一些物体跟随另一个物体,也就是说,每当前者移动时,将其脸转向另一个物体。所以我了解了glRotate。
我以为每次移动时我都会获得前者的(x,y,z),然后将其坐标发送到另一个函数,该函数应该更新后者的“面向”属性。但是,如何根据跟随对象的新旧方向找到glRotate的'angle'参数?
非常感谢任何帮助。谢谢你的时间。
答案 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指出它是灾难性的破坏。