Java OpenGL-Cube正在使用本地位置而不是全局位置进行转换

Java OpenGL-Cube正在使用本地位置而不是全局位置进行转换,java,opengl,Java,Opengl,在OpenGL的LWJGL绑定中,我试图制作一个能够根据用户输入进行定位、旋转和缩放的立方体。立方体的旋转是基于偏移值的,偏移值是立方体到旋转点的距离 我面临的唯一问题是,当我想要定位立方体时,立方体的位置是相对于立方体的旋转设置的。因此,如果我将立方体在X轴上旋转45度,当我希望它全局(笔直向下)定位时,更改Y位置将使其定位在与立方体局部成45度角的位置 请记住,我在德国劳埃德船级社方面不是很有经验,仍然在使用矩阵及其操作方式 glPushMatrix(); glTransl

在OpenGL的LWJGL绑定中,我试图制作一个能够根据用户输入进行定位、旋转和缩放的立方体。立方体的旋转是基于偏移值的,偏移值是立方体到旋转点的距离

我面临的唯一问题是,当我想要定位立方体时,立方体的位置是相对于立方体的旋转设置的。因此,如果我将立方体在X轴上旋转45度,当我希望它全局(笔直向下)定位时,更改Y位置将使其定位在与立方体局部成45度角的位置

请记住,我在德国劳埃德船级社方面不是很有经验,仍然在使用矩阵及其操作方式

    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();

这是因为在立方体已经旋转后进行平移,这意味着平移是在局部坐标系中进行的。将最后一个
glTranslate
调用移动到
glPushMatrix
的正下方,您应该可以得到所需的内容。

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

正确答案。结果是我误诊了我的问题,并且有不同的问题,但我会分别解决。正确答案。结果是我误诊了我的问题,有不同的问题,但我会分别找出答案。