使用aTan2将对象面向目标

时间:2015-01-12 03:14:39

标签: c++ math matrix rotation atan2

我创造了一个以惯性移向目的地的物体。我让对象面对目的地有很多麻烦。我的代码很简单,它计算角度,将其转换为度数并将该角度传递给Matrix4 Rotate函数,该函数调整localTransform(场景图)。

问题是对象会产生,然后无休止地旋转。它慢慢朝着它的目标前进,但只是继续旋转。我在没有翻译的情况下对它进行了测试,它无论在现场如何旋转。我所需要的只是让对象面向目的地。我的翻译/旋转功能正常工作,我用它来旋转一个物体,让一个物体产生它的父旋转并向那个方向前进。它们使用GLM库提供1:1的结果。

我尝试在aTan2中交换顺序,删除度转换,(虽然没有做任何事,旋转功能需要度数)并交换翻译/旋转顺序。

localTransform是组合的旋转/缩放/平移矩阵。 row [3]列[1]是Y. [3] [0]是X。

float fAngle = atan2(v3Destination[1] - localTransform.data[3][1] , v3Destination[0] - localTransform.data[3][0]);
float fAngleDegrees = fAngle * 180 / PI;
localTransform = Matrix4::Rotate(localTransform, fAngleDegrees, Vector3(0.0f, 0.0f, 1.0f));

Vector3 Movement;
Movement[0] = v3Destination[0] - localTransform.data[3][0];
Movement[1] = v3Destination[1] - localTransform.data[3][1];

Movement = Movement * fSpeed * Application.GetTimeStep();
localTransform = Matrix4::Translate(localTransform, Movement);

有关如何处理此事的任何建议?这都是2D坐标,但旋转是在Z轴上完成的。

1 个答案:

答案 0 :(得分:0)

只是一个预感,但是每次都完全重新计算localTransform矩阵吗?

或者你可以在上一次迭代中已经旋转过的矩阵中添加一个旋转。

这可以解释连续轮换。