2011-09-19 122 views
3

我有一些關於四元數的理解問題。四元數旋轉矩陣意外的有相反的意義

爲了讓我的世界對象以正確的方式旋轉,我需要在刷新對象世界矩陣時反轉它們的四元數旋轉。

我創建的對象的旋轉與此代碼:

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

,並刷新對象世界矩陣是這樣的:

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

這不是工作;它使對象以相反的方式旋轉,相比之下它應該!

的是,讓我的對象的方式旋轉正確:

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

爲什麼我必須反轉對象的旋轉?

回答

0

這不是一個四元數問題,因爲它是您使用的DirectX調用的用法和/或文檔問題。通話所帶來的轉換是移動相機時發生的轉換。如果你要保持相機的固定和移動世界,你就要交換正在移動的東西以及固定的東西。這些座標轉換是相互顛倒的,這就是爲什麼採取逆向工作的原因。

儘管如此,您不需要採用明確的反轉。只需交換前兩個參數的順序即可。