2015-10-14 41 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