所以我编写了一个面向新程序员的基于四元数的 3D 相机,因此他们非常容易集成和开始使用。
在我开发它时,起初我会将用户输入作为欧拉角,然后根据该帧的输入生成一个四元数。然后,我将获取相机的四元数并将其乘以我们为输入生成的四元数,理论上这应该只是将输入旋转添加到相机旋转的当前状态,然后一切都会变得又胖又快乐。让我们称之为:累积四元数,因为我们只存储和添加四元数。
但我注意到这种方法存在问题。我使用它的次数越多,即使我只在一个欧拉角上旋转,比如 Yaw,它也会在一些迭代中开始流血到另一个,比如 Pitch。这是轻微的,但相当不可接受。
所以我做了更多的研究,发现一篇文章说累积欧拉角更好,所以相机将它的当前旋转存储为欧拉角,并且输入只是在每一帧添加到它们。然后我每帧从它们生成一个四元数,然后用来生成我的旋转矩阵。这解决了旋转渗入不当轴的问题。
那么有任何 Stackoverflow 成员对这个问题有任何见解吗?这是一种正确的做事方式吗?