四元数旋转矩阵意外地具有相反的意义

时间:2011-09-19 20:35:53

标签: math rotation quaternions

我对四元数有一些了解。

为了让我的世界对象以正确的方式旋转,我需要在刷新对象世界矩阵时反转它们的四元数旋转。

我使用以下代码创建对象旋转:

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);

为什么我必须反转物体旋转?

1 个答案:

答案 0 :(得分:0)

这不是四元数问题,因为它是您正在使用的DirectX调用的使用和/或文档问题。调用给出的转换是移动相机时发生的转换。如果你保持相机固定并移动世界,你就会交换正在移动的东西和固定的东西。这些坐标变换是相互反转的,这就是为什么对你进行反演。

但是,您不需要采用明确的反转。只需交换前两个参数的顺序。