OpenGL基于旋转在其上转换对象的局部坐标系

时间:2015-03-25 01:30:36

标签: opengl matrix rotation translation coordinate-systems

所以目前正在为我的课程工作制作一个基于飞行火箭的想法的游戏,我花了太多时间思考它背后的物理学,我完全忽略了让它正常运动。 例如,当我绘制一个顶部指向天空的圆锥体时,我在X轴上旋转它会正确旋转,但是如果我在Y轴上平移它,它会在全局Y轴上移动而不是在它上面。局部坐标系,其Y轴指向锥形顶部。 我的问题是openGL是否有一个局部坐标系,或者我必须以某种方式制作我自己的转换矩阵,如果是这样我将如何去做。

我进行转换和旋转的方式如下:

glPushMatrix();
    glTranslatef(llmX, llmY + acceleration, llmZ);
    glRotatef(rotX, 1.0f, 0.0f, 0.0f);
    glRotatef(rotY, 0.0f, 0.0f, 1.0f);
    drawRocket();
glPopMatrix();

这是一张更好地解释我的意思的图片,希望能提供更好的解释。 enter image description here

编辑:我觉得很奇怪旋转似乎一个接一个地工作,如果我在X轴上旋转一次然后继续在Z轴上旋转它从已经旋转的X轴旋转世界X轴。

希望有人能帮助我理解这一点,真的需要让它适合我的项目。 谢谢。

1 个答案:

答案 0 :(得分:1)

如果使用平移矩阵向上移动(即沿正Y方向移动),无论您在矩阵堆栈中的哪个位置或在变换过程中,您都要沿正Y方向移动顶点

如果您希望它沿旋转方向移动,我建议沿Y轴 首先 进行平移,然后旋转到所需的角度。从本质上讲,以相反的方式推动矩阵。