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

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

为什么我需要反转对象旋转?
1个回答

0

这不是四元数问题,而是与你正在使用的DirectX调用的使用和/或文档问题。该调用提供的变换是移动相机时发生的变换。如果您保持相机固定并移动世界,则会交换移动和固定的内容。这些坐标变换彼此互为反函数,这就是为什么对其取反能起作用的原因。

但是,您不需要进行明确的倒置。只需交换前两个参数的顺序即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接