旋转模型'compas correct'的问题

时间:2012-08-24 15:03:05

标签: c++ opengl rotation

我遇到的问题如下。 当我将太空飞船向上旋转(俯仰)并将其旋转整整90度时,它会直立,然后尝试再次在y轴上旋转,模型现在以与滚动相同的方式旋转起始位置。

现在我的问题,我该如何解决这个问题?我怎样才能确保我的模型总是在我想要它滚动的时候滚动,在我想要它的时候总是投球,等等。而不是它现在做什么。

我正在使用c ++和opengl。

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,由于你使用欧拉角执行旋转的方式,你会看到Gimbal Lock

然而,四元数不是唯一的解决方案。您可以构造一个4x4矩阵来表示对象的当前方向,并在每次更改面时将相对旋转应用于它。它并不完美,因为您需要跟踪每个对象的16个值而不是4个四元数,并且为了处理浮点舍入误差,您需要定期对事物进行标准化,以便您的方向矩阵不会变为偏斜变换。另一方面,它在概念上简单且快速地组合在一起。