3

我对四元数有一些理解问题。

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

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

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

为什么我必须反转对象旋转?

4

1 回答 1

0

这不是四元数问题,而是您正在使用的 DirectX 调用的用法和/或文档问题。调用提供的转换是在您移动相机时发生的转换。如果您保持相机固定并移动世界,那么您正在交换移动的内容和固定的内容。这些坐标变换是互为逆的,这就是为什么取逆对你有用。

不过,您不需要进行显式逆运算。只需交换前两个参数的顺序即可。

于 2012-11-08T18:14:43.620 回答