2013-05-11 56 views
0

在OpenGL的LWJGL绑定中,我试图制作一个可以根据用户输入进行定位,旋转和缩放的立方体。立方体的旋转意味着基于偏移值,该偏移值是立方体与旋转点之间的距离。OpenGL - Cube使用本地位置进行翻译,而不是全局编码

我面临的唯一问题是立方体的位置与立方体的旋转相关,当我希望它定位时。因此,如果我将X轴上的立方体旋转45度,改变Y轴位置将使它位于立方体本地的45度角,当我希望它全局定位时(直线向下)。

请记住,我不是很有经验的GL,我仍然在使用矩阵及其操作方式。

glPushMatrix(); 

    glTranslatef(pivot.xPos + offsetX, -(pivot.yPos + offsetY + 24), pivot.zPos + offsetZ); 
    glRotatef(rotX, 1.0F, 0F, 0F); 
    glRotatef(rotY, 0F, 1.0F, 0F); 
    glRotatef(rotZ, 0F, 0F, 1.0F); 
    glTranslatef(-(pivot.xPos + offsetX), (pivot.yPos + offsetY + 24), -(pivot.zPos + offsetZ)); 

    // This is where the cube's location is set. The units are multiplied by two and the Y-location is offset by 24. 
    glTranslatef(((pivot.xPos + offsetX) * 2 + sizeX), (((pivot.yPos + offsetY) * 2) + sizeY) - 24, -((pivot.zPos + offsetZ) * 2 + sizeZ)); 

    glScalef(sizeX, sizeY, sizeZ); 

    glBegin(GL_QUADS); 
    ... draws the cube 
    glPopMatrix(); 

回答

4

这是因为您在立方体旋转后进行翻译,这意味着翻译是在本地坐标系中。将最后一个glTranslate调用移动到glPushMatrix的下方,你应该得到你想要的。

+0

正确答案。事实证明,我误诊了我的问题,并有不同的问题,但我会分开解决。 – 2013-05-11 18:07:11