0

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

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

我已经尝试交换 aTan2 中的顺序,删除度数转换,(尽管什么也没做,Rotate 函数需要度数)并交换平移/旋转顺序。

localTransform 是组合的旋转/缩放/平移矩阵。row[3]column[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 轴上完成的。

4

1 回答 1

0

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

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

这可以解释连续旋转。

于 2015-01-12T03:26:50.217 回答