2011-09-19 121 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调用的用法和/或文档问题。通话所带来的转换是移动相机时发生的转换。如果你要保持相机的固定和移动世界,你就要交换正在移动的东西以及固定的东西。这些坐标转换是相互颠倒的,这就是为什么采取逆向工作的原因。

尽管如此,您不需要采用明确的反转。只需交换前两个参数的顺序即可。