指している方向_rotationAxis
は変化していないため、あなたが述べた回転方向は一定で正しいです。ただし、大きさ_rotationAxis
が変化しているため、x、y、z コンポーネントの値が異なり、回転量も異なります。
交差を実行して回転軸を取得すると、結果のベクトルの長さは、交差した 2 つのベクトルの長さと、それらを分離する角度の関数になります。結果のベクトルの方向は、2 つの入力ベクトルの両方に対して常に 90 度です。
ほとんどの場合、使用している 2 つのベクトルの長さは一貫しており、単位の長さである可能性が最も高いですが、フレームごとにそれらの間の角度が小さいため_rotationAxis
、フレームごとに異なる長さになります。
Xna では、生成される回転の量は、CreateFromAxisAngle
プラグインする角度だけでなく、軸ベクトルの長さによっても決定されます (ドキュメントでは明らかではありませんが、それでもなお真実です)。したがって、各フレームで使用する回転軸がどんどん短くなり、フレームごとに回転量がどんどん小さくなります。回転軸ベクトルの長さが 1.0 (単位長ベクトル) の場合にのみ、プラグインした回転角度になります。
で使用する前に、 を正規化し_rotationAxis
て単位長にする必要がありCreateFromAxisAngle
ます。
_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
_rotationAxis.Normalize();
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed)));