关于 SO 的第一个问题,尽管我已经通过 Google 来过这里很多次。我已经阅读了很多关于使用四元数表示旋转以及寻找有类似问题的人的主题。我还没有找到一个好的解决方案,或者我能理解的解决方案。所以我尝试提出一个足够清晰的问题来产生可靠的答案。
我目前正在使用四元数(特别是 Qt 4.7 四元数/C++)来表示我的相机的方向。在程序的每个步骤中,我都会检查鼠标移动并执行 fromAxisAndAngle(xaxis, x_mouse_movement) 和 fromAxisAndAngle(yaxis, y_mouse_movement)。我将这两个四元数相乘(yaxis * xaxis)。对于初始化,我有一个单位四元数 (w,x,y,z -> 1,0,0,0) 来相乘。我不断累积这些 fromAxisAndAngle 乘法与当前方向的旋转。这会产生一个滚动,称为李群问题(我认为),如果你连续应用俯仰和偏航,你可以产生一个纯滚动,这就是我在当前实现中所拥有的(这对于我的程序来说是正确的我可以告诉)。
我已经实现了另一种方法,其中俯仰、偏航、滚动增加,并且每次从这些值从头开始从 AxisAndAngle 构建四元数。这会产生一个正确的 FPS 风格的相机,但它会受到万向节锁定的影响。我的目标是保持纯四元数表示,同时消除(或补偿)仅由俯仰和偏航产生的滚动效果,这样我就可以将这款通用 6DOF 相机用作 FPS 相机或太空船式相机。我正在寻找更正此卷的建议(特定例程),或者可以满足我需要的替代表示。对不起,文字墙,但我想非常清楚。感谢您的时间和愉快的黑客攻击!