四元数3轴旋转

时间:2013-03-16 01:47:16

标签: c++ rotation directx quaternions

这里有点帮助。我从硬件陀螺仪接收每轴1次旋转,因此总共3个轴(x,y,z)旋转3次。当我使用基于矩阵的旋转时,我可能因为乘法顺序(RotX * RotY * RotZ<> RotY * RotX * RotZ)而得到奇怪的旋转,我也尝试过MatrixYawPitchRoll,但会出现相同的效果。因此我得出结论,我应该使用四元数,但我认为我必须创建3个四元数,每旋转一个,但当我将它们与乘法组合时,我得到与基于矩阵的旋转相同的效果......所以有人可以告诉我如何正确使用3个旋转来创建和组合四元数而不具有先前乘法效应的外观?

P.S。 D3DXQuaternionRotationYawPitchRoll仍然受到与基于矩阵的旋转相同的效果。

2 个答案:

答案 0 :(得分:2)

四元数不是一种能够消除旋转问题的神奇药膏。所有四元数都是表示特定方向和进行方向变换的便宜方式。

你的问题是你没有把你的方向表示为四分之一;你把它表示为3个角度。而表示会导致轮换问题。

您需要停止使用角度。将对象的方向表示为四元数。如果要调整方向,请从调整角度/轴创建四元数,然后将其乘以对象的方向。重新规范四元数,你就完成了。

答案 1 :(得分:0)

我看到两个主要问题来源。

  1. 你从欧拉天使的转变被打破了。
  2. 您使用无效的欧拉角方案。 Euler Angels存在24种类型的方案 http://en.wikipedia.org/wiki/Euler_angles
  3. 简单Euler角度方案是围绕轴XYZ,ZYX,ZXZ旋转的顺序......

    所有与矩阵/四元数的转换都可以在源代码中找到Ken Shoemake,1993年的优秀文章。

    http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/