我遇到的问题如下。当我向上(俯仰)旋转我的宇宙飞船并在俯仰角上旋转整整 90 度时,它直立,然后尝试在 y 轴上再次旋转它,模型现在以与滚入相同的方式旋转起始位置。
现在我的问题是,我该如何解决这个问题?我怎样才能确保我的模型在我想要它滚动时总是滚动,当我想要它倾斜时总是倾斜等等。而不是它现在所做的。
我正在使用 c++ 和 opengl。
正如已经指出的那样,您看到Gimbal Lock是由于您使用欧拉角执行旋转的方式。
然而,四元数并不是唯一的解决方案。您可以改为构造一个 4x4 矩阵来表示对象的当前方向,并在每次更改朝向时对其应用相对旋转。它并不完美,因为您需要跟踪每个对象的 16 个值而不是四元数的 4 个值,并且为了处理浮点舍入错误,您需要定期对事物进行归一化,这样您的方向矩阵就不会变成一个倾斜变换。另一方面,它在概念上很简单,而且组装起来也很快。