这里有点帮助。我从硬件陀螺仪接收每轴1次旋转,因此总共3个轴(x,y,z)旋转3次。当我使用基于矩阵的旋转时,我可能因为乘法顺序(RotX * RotY * RotZ<> RotY * RotX * RotZ)而得到奇怪的旋转,我也尝试过MatrixYawPitchRoll,但会出现相同的效果。因此我得出结论,我应该使用四元数,但我认为我必须创建3个四元数,每旋转一个,但当我将它们与乘法组合时,我得到与基于矩阵的旋转相同的效果......所以有人可以告诉我如何正确使用3个旋转来创建和组合四元数而不具有先前乘法效应的外观?
P.S。 D3DXQuaternionRotationYawPitchRoll仍然受到与基于矩阵的旋转相同的效果。
答案 0 :(得分:2)
四元数不是一种能够消除旋转问题的神奇药膏。所有四元数都是表示特定方向和进行方向变换的便宜方式。
你的问题是你没有把你的方向表示为四分之一;你把它表示为3个角度。而表示会导致轮换问题。
您需要停止使用角度。将对象的方向表示为四元数。如果要调整方向,请从调整角度/轴创建四元数,然后将其乘以对象的方向。重新规范四元数,你就完成了。
答案 1 :(得分:0)
我看到两个主要问题来源。
简单Euler角度方案是围绕轴XYZ,ZYX,ZXZ旋转的顺序......
所有与矩阵/四元数的转换都可以在源代码中找到Ken Shoemake,1993年的优秀文章。
http://tog.acm.org/resources/GraphicsGems/gemsiv/euler_angle/