当前位置:  开发笔记 > 程序员 > 正文

基于四元数的3D相机是否应该累积四元数或欧拉角?

如何解决《基于四元数的3D相机是否应该累积四元数或欧拉角?》经验,为你挑选了1个好方法。

因此,我编写了一个面向新程序员的基于四元数的3D相机,因此它们非常容易集成并开始使用.

在我开发它时,首先我将用户输入作为欧拉角,然后根据该帧的输入生成一个四元数.然后,我将拍摄相机的四元数并将其乘以我们为输入生成的四元数,理论上应该简单地将输入旋转添加到相机旋转的当前状态,事情就会变得既肥胖又快乐.让我们称之为:积累四元数,因为我们只存储和添加四元数.

但是我注意到这个方法存在问题.我使用的越多,即使我只是在一个欧拉角上旋转,比如Yaw,在一些迭代中,它会开始流血到另一个,Pitch说.这很轻微,但相当不可接受.

所以我做了一些更多的研究,并发现一篇文章说明积累欧拉角更好,所以相机将它的当前旋转存储为欧拉角,并且输入只是每帧添加到它们.然后我从每个帧生成一个四元数,然后用它来生成我的旋转矩阵.这解决了旋转出血问题进入不正确的轴.

那么任何Stackoverflow成员都能对这个问题有所了解吗?这是一种正确的做事方式吗?



1> Chris..:

乘法四元数将受到浮点舍入问题的累积(即使像45度这样的简单角度也不准确).这是复合旋转的一种很好的方法,但是每个四元数组件的精度会随着时间的推移而下降.渗透是一个副作用,一个视觉上更糟糕的一个虽然你的四元数可以开始结合比例因子 - 为了恢复它,你必须在任何情况下重新归一化回欧拉角.定点欧拉角不会累积舍入.

重新计算每帧的四元数是最小的.我不打算尝试优化它.在重新规范化之前,你可能会允许一些四元数积累以恢复精度,但实际上并不值得付出努力.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有