如何围绕轴旋转3D对象而不更改其位置? (LWJGL)

时间:2015-10-14 17:03:59

标签: opengl 3d rotation lwjgl

我目前正在尝试获取一个复合3D对象,该对象由两个3D金字塔组成,围绕给定轴旋转一个弧度角。但是,复合对象中的一个金字塔不会与另一个金字塔齐平。

在下图中,我试图围绕X轴旋转左对象PI弧度。但是,其中一个金字塔不能保持在正确的位置。

http://i.stack.imgur.com/MekFZ.png

以下是我用于缩放,旋转和翻译的代码。

float[] model = { xSize,  0,    0,    0,
                       0,   ySize,  0,    0,
                       0,     0,   zSize, 0,
                      xLoc,  yLoc,  zLoc,    1 };


    FloatBuffer modelBuf = BufferUtils.createFloatBuffer(model.length);

    matrix = new Matrix4f();

    matrix = matrix.scale(xSize, ySize, zSize);
    matrix = matrix.rotateXYZ(dxRot, dyRot, dzRot);
    matrix = matrix.setTranslation(xLoc, yLoc, zLoc);

    modelBuf = matrix.get(modelBuf);

    glUniformMatrix4fv( unif_model, false, modelBuf );

有人知道为什么会发生这种情况吗?

1 个答案:

答案 0 :(得分:0)

好像你想要分组对象。您应该使用变换树。即为整个组引入变换矩阵,并为组内的每个对象分离变换矩阵(相对于组的坐标系)。

在您的具体示例中,对象'矩阵只包含一个恒定的平移和旋转部分。他们不会改变。渲染对象时,应将当前变换矩阵设置为:

didReceiveMemoryWarning:

如果您想移动,旋转,缩放整个组,请仅将这些转换应用于transform = groupTransform * objectTransform