我目前正在尝试获取一个复合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 );
有人知道为什么会发生这种情况吗?
答案 0 :(得分:0)
好像你想要分组对象。您应该使用变换树。即为整个组引入变换矩阵,并为组内的每个对象分离变换矩阵(相对于组的坐标系)。
在您的具体示例中,对象'矩阵只包含一个恒定的平移和旋转部分。他们不会改变。渲染对象时,应将当前变换矩阵设置为:
didReceiveMemoryWarning:
如果您想移动,旋转,缩放整个组,请仅将这些转换应用于transform = groupTransform * objectTransform
。