使用 aTan2 将对象面向其目的地

Using aTan2 to face an object to its destination

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

问题是物体生成,然后不停地旋转。它慢慢地朝着目标前进,但只是不停地旋转。我已经在没有翻译的情况下对其进行了测试,它会在现场旋转。我所需要的只是让物体朝向它的目的地。我的 Translate/Rotate 功能正常工作,我用它来旋转一个对象,让一个对象随着其父对象的旋转而生成,并朝那个方向前进。他们使用 GLM 库提供 1:1 结果。

我试过交换 aTan2 中的顺序,删除度数转换(虽然这什么都不做,但旋转函数需要度数)并交换 translation/rotation 顺序。

localTransform 是组合的 rotation/scale/translation 矩阵。行[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);

关于如何处理这个问题有什么建议吗?这都是二维坐标,但是旋转是在 Z 轴上完成的。

只是一种预感,但 localTransform 矩阵是否在每个时间步都完全重新计算?

或者您是否可以向在上一次迭代中已经旋转的矩阵添加旋转。

这可以解释连续旋转。