2

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

PS D3DXQuaternionRotationYawPitchRoll 仍然遭受与基于矩阵的旋转相同的效果。

4

2 回答 2

3

四元数不是一种可以消除旋转问题的神奇药膏。所有四元数都是表示特定方向和进行方向转换的廉价方式。

您的问题是您没有将方向表示为四元数;您将其表示为 3 个角度。正是这种表示导致了您的轮换问题。

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

于 2013-03-16T01:53:14.843 回答
0

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

  1. 你从 Euler Angels 的转变被打破了。
  2. 您使用无效的欧拉角方案。存在 24 种欧拉天使方案 http://en.wikipedia.org/wiki/Euler_angles

简单的欧拉角方案是围绕轴 XYZ、ZYX、ZXZ 的旋转顺序......

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

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

于 2014-03-14T09:51:51.303 回答