3

四元数に関する理解の問題があります。

ワールド オブジェクトを正しい方法で回転させるには、オブジェクト ワールド マトリックスを更新しながらクォータニオン回転を反転する必要があります。

次のコードでオブジェクトの回転を作成します。

Rotation = Quaternion.RotationMatrix(
               Matrix.LookAtRH(Position, 
               Position + new Vector3(_moveDirection.X, 0, _moveDirection.Y),
               Vector3.Up)
           );

オブジェクトの World マトリックスを次のように更新します。

Object.World = Matrix.RotationQuaternion(Rotation) 
               * Matrix.Translation(Position);

これは機能していません。オブジェクトを本来とは逆に回転させます。

これは、オブジェクトを正しく回転させる方法です:

Object.World = Matrix.RotationQuaternion(Quaternion.invert(Rotation))
               * Matrix.Translation(Position);

オブジェクトの回転を反転する必要があるのはなぜですか?

4

1 に答える 1

0

これは、使用している DirectX 呼び出しの使用法および/またはドキュメントの問題であるため、四元数の問題ではありません。呼び出しが与える変換は、カメラを動かしたときに発生するものです。カメラを固定したまま世界を動かしている場合、動いているものと固定されているものを交換しています。これらの座標変換は互いに逆であるため、逆をとることでうまくいきます。

ただし、明示的な逆数を取る必要はありません。最初の 2 つの引数の順序を入れ替えるだけです。

于 2012-11-08T18:14:43.620 に答える