【问题标题】:OpenGL - Rotations on different axis independent of eachotherOpenGL - 不同轴上的旋转相互独立
【发布时间】:2015-04-25 14:21:03
【问题描述】:

首先,如果我不知道如何准确地表达这一点,如果我混淆了任何人,我很抱歉。

无论如何,我想做的是在 3 轴上旋转,但彼此独立。如果我有

glRotatef(getPitch(),1f,0,0);
glRotatef(getYaw(),0,1f,0);
glRotatef(getRoll(),0,0,1f);

然后,它在 x 轴上旋转我的对象就好了,但其他两个轴在 x 旋转的偏移量上旋转。我如何旋转这些都彼此独立? (在同一个物体上)

再次,对不起,如果我混淆了任何人。

【问题讨论】:

    标签: opengl rotation lwjgl


    【解决方案1】:

    您可以将矩阵推入和弹出堆栈,因此您可以这样做:

    glPushMatrix();
    glRotatef( getPitch(), 1.0f, 0.0f ,0.0f );
    glPopMatrix();
    
    glPushMatrix();
    glRotatef( getYaw(), 0.0f, 1.0f, 0.0f);
    glPopMatrix();
    
    glPushMatrix();
    glRotatef( getRoll(), 0.0f, 0.0f, 1.0f);
    glPopMatrix();
    

    所以基本上,推动矩阵,将变换矩阵保存在当前状态。您在对象上应用所需的转换(在您的情况下围绕轴旋转),这会更新矩阵。弹出它会将其恢复到应用旋转之前的原始状态。然后,您可以独立于其他旋转应用每个旋转。

    【讨论】:

    • 谢谢,但我想在所有三个轴上相互独立地旋转同一个对象。
    • 您能否提供更多详细信息。其他两个轴在 x 旋转的偏移量上旋转是什么意思?就个人而言,我只会存储一个旋转矩阵,并在每个轴上逐步应用旋转(俯仰、偏航、滚动),然后将其加载到 OpenGL 中。类似于接受的答案here
    • 如果您还没有在 OpenGL 中使用矩阵,可以参考一些资源 (1) 矩阵教程 link 用于矩阵头类和关于应用旋转和加载生成的矩阵以描述方向的教程。 (2) OpenGL 数学库,包括矩阵类型,以及应用旋转的函数link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多