方向_rotationAxis
因爲你的狀態是恆定和正確的,因此點的旋轉方向不會改變。但_rotationAxis
的大小正在改變,因此您可以得到x,y,z分量和不同旋轉量的不同值。
當執行交叉得到的旋轉軸線,所得到的矢量的長度是進行雜交AND將它們分開的角度這兩個向量的長度的函數。結果矢量的方向對於兩個輸入矢量總是90度。
最有可能的是,您使用的2個向量的長度是一致的,並且最接近單位長度,但由於它們之間的角度小於每個幀,因此每個幀的結果長度不同。
在Xna中,由CreateFromAxisAngle
產生的旋轉量不僅取決於您插入的角度作爲參數,還取決於軸向量的長度(在文檔中不明顯,但確實不會少) 。因此,您每幀都使用更短和更短的旋轉軸,這會導致每幀的旋轉量越來越小。如果旋轉軸向量的長度爲1.0(單位長度向量),則只會導致插入的旋轉角度。
在CreateFromAxisAngle
中使用它之前,您必須將_rotationAxis
標準化爲單位長度。
_rotationAxis = Vector3.Cross(Direction, _flyTargetDirection);
_rotationAxis.Normalize();
_rotation = Matrix.CreateFromAxisAngle(_rotationAxis, MathHelper.ToRadians(_flyViewingSpeed - Math.ToRadians(rotationSpeed)));