【问题标题】:Quaternion rotation matrix unexpectedly has the opposite sense四元数旋转矩阵竟然有相反的意义
【发布时间】:2011-11-20 13:52:18
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: math rotation quaternions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2010-12-06
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多