慣性で目的地に向かって移動するオブジェクトを作成しました。オブジェクトを目的地に向けるのに苦労しています。私のコードは単純です。角度を計算し、それを度に変換し、その角度を Matrix4 Rotate 関数に渡します。これにより、localTransform (シーングラフ) が調整されます。
問題は、オブジェクトが生成された後、無限に回転することです。目標に向かってゆっくりと進みますが、回転し続けます。翻訳なしでテストしましたが、その場で関係なく回転します。私が必要とするのは、オブジェクトがその目的地を向いていることだけです。私の移動/回転機能は正しく機能します。オブジェクトを回転させ、親の回転でオブジェクトをスポーンさせ、その方向に向かいます。GLM ライブラリで 1 対 1 の結果を提供します。
aTan2 で順序を交換し、度の変換を削除して (それは何もしませんが、Rotate 関数は度を取得します)、並進/回転の順序を交換してみました。
localTransform は、回転/スケール/平行移動行列を組み合わせたものです。行 [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 軸で行われます。