【发布时间】:2013-03-16 01:47:15
【问题描述】:
这里有点帮助。我从硬件陀螺仪接收每个轴 1 次旋转,因此总共 3 个轴(x,y,z)旋转 3 次。当我使用基于矩阵的旋转时,我得到奇怪的旋转可能是因为乘法顺序 (RotX*RotY*RotZ RotY*RotX*RotZ),我也尝试过 MatrixYawPitchRoll,但出现了相同的效果。因此,我得出结论,我应该使用四元数,但我认为我必须创建 3 个四元数,每次旋转一个,但是当我将它们与乘法相结合时,我会得到与基于矩阵的旋转相同的效果......所以有人可以告诉我如何正确使用 3 次旋转来创建和组合四元数,而不会出现之前的乘法效果?
附: D3DXQuaternionRotationYawPitchRoll 仍然遭受与基于矩阵的旋转相同的效果。
【问题讨论】:
-
您遇到的问题称为Gimbal lock。链接的维基百科页面详细介绍了如何使用四元数解决它(我想有问题的 DX 函数首先将它们转换为矩阵,这使四元数的属性无效)。
-
感谢 didierc 的评论,我已经使用了这些转换......据我的理解,我认为 D3DX 就绪功能只是这些的包装......
-
@ribben:你说的这些“乘法效应”是什么?
-
当我使用矩阵并执行 RotZRotYRotX 当我按此顺序旋转陀螺仪 X->Y->Z 时,一切似乎都很好......但是陀螺仪必须能够以任何顺序进行评分,所以我得到奇怪的旋转......
-
@ribben:陀螺仪无法锁定万向节。它也不能改变轮换的顺序。或者如果可以,那么它是一个编码不佳的陀螺仪。当它改变旋转顺序时,它至少会告诉你吗?
标签: c++ rotation directx quaternions