opengl围绕世界轴旋转

时间:2015-01-05 20:49:34

标签: opengl rotation

有OpenGl经验的人可以提出一个策略来帮助我解决我在轮换时遇到的问题吗?

    想象一下用螺栓固定在宇宙中心的一组世界坐标xyz轴;也就是说,就此而言 讨论他们不动。我也没有翻译,相机是固定的,     保持简单。我有一个以原点为中心的立方体,意图是     按'x','y'和'z'键会增加 表示旋转立方体绕世界xyz轴的度数的变量。每个按键都是90°(你可以想象旋转乐高积木 以这种方式),所以按'x'键增加一个浮动属性RotXdeg: RotXdeg + = 90.0f; 同样按下'y'和'z'键。

实现 [1] 的一种天真的方式是:

   Gl.glPushMatrix(); 
    Gl.glRotatef(RotXdeg, 1.0f, 0.0f, 0.0f);
    Gl.glRotatef(RotYdeg, 0.0f, 1.0f, 0.0f);
    Gl.glRotatef(RotZdeg, 0.0f, 0.0f, 1.0f);
    Gl.glPopMatrix();

这当然具有效果或旋转立方体及其局部xyz轴,因此尚未实现关于世界 xyz轴的所需旋转。 (对于那些不熟悉OpenGl的人来说,这可以通过简单地围绕x轴旋转90&#176来证明     &#8212使局部y轴沿世界z轴&#8212定向 然后围绕y进行随后的90&#176旋转,这对用户来说似乎是旋转     关于世界z轴)。 我相信这post要求类似的东西,但答案并不清楚,我的理解是四元数只是解决问题的一种方法。  在我看来,这     应该有一个相对简单的解决方案,即使它不是 特别有效。我花了好几个小时尝试各种想法,包括创建我自己的旋转矩阵并尝试将它们与模型视图矩阵相乘,但是没有 无济于事。 (我意识到矩阵乘法不是可交换的,但我觉得这不是问题。)

([1]顺便说一句,我正在使用Tao OpenGl命名空间;感谢http://vasilydev.blogspot.com的建议。)

Code is here

1 个答案:

答案 0 :(得分:0)

如果立方体位于(0,0,0)世界,并且局部旋转具有相同的效果。如果立方体处于另一个位置,则90度旋转将导致四分之一圆周轨道(0,0,0)。目前还不清楚你未能实现的目标,我还建议不要使用旧的立即模式进行矩阵运算。然而,通过这种方式实现世界轮换的方法是:   - 翻译成(0,0,0)   - 旋转90度   - 翻译回来