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

时间:2013-05-11 17:42:49

标签: java opengl

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

我面临的唯一问题是,当我希望它找到时,立方体的位置是相对于立方体的旋转设置的。因此,如果我将立方体旋转45度,比如说X轴,那么改变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();

1 个答案:

答案 0 :(得分:4)

这是因为在多维数据集旋转后进行转换,这意味着转换位于本地坐标系中。移动glTranslate下面的glPushMatrix电话,您应该得到您想要的内容。