2015-10-14 87 views
1

我正在尝试获取由两个三维金字塔组成的复合3D对象,以弧度为角度围绕给定轴旋转。但是,复合物体的其中一个金字塔并不与其他物体齐平。如何绕轴旋转3D对象而不更改其位置? (LWJGL)

在下面的图片中,我试图旋转关于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); 

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

+0

您能否提供'Matrix4f'的代码? –

+0

https://github.com/JOML-CI/JOML/blob/master/src/org/joml/Matrix4f.java –

回答

0

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

在具体的例子中,对象的矩阵只包含一个常量的平移和旋转部分。他们不会改变。当渲染对象,则应设置当前变换矩阵为:

transform = groupTransform * objectTransform 

如果你想移动,旋转,缩放整个组,将这些转换只groupTransform