OpenGL围绕它的本地轴旋转对象

时间:2014-04-30 20:57:02

标签: c opengl rotation

想象一下原点的3D矩形。它首先沿Y轴旋转。到目前为止这么好。现在,它围绕X轴旋转。但是,OpenGL(API:glrotatef)将X轴解释为全局X轴。如何确保“轴随物体移动”?

这非常像飞机。例如,如果首先应用偏航(Y旋转),然后是俯仰(X旋转),则正确的俯仰将沿着平面的局部轴进行X旋转。

编辑:我看到这个称为万向节锁定问题,但我认为不是这样。

1 个答案:

答案 0 :(得分:0)

您不能始终将飞机的方向描述为一个x旋转和一个y旋转。即使你也存储和一个z旋转。这正是万向节锁定问题。

它的关键在于你必须按某种顺序应用旋转。为了争论,先说出x然后是y然后是z。那么如果x旋转90度会发生什么?将y轴折叠到z轴所在的位置。然后说y旋转也是90度。现在,将z轴弯曲到x轴所在的位置。那么现在任何z旋转都会产生什么影响?

这只是一个容易掌握的例子。这不是一个特例。你不能通过说"哦,我会先检测到何时进行z旋转来挥动你的双手"或者"我将通过特殊途径进行90度旋转"或任何其他小黑客。尝试以三个独立的标量存储和更新方向不起作用。

在经典的OpenGL中,对glRotatef的调用意味着" ...然后像这样旋转当前矩阵"。它与世界坐标或模型坐标或您正在考虑的任何其他空间无关。