我在使用OpenGL ES 2.0
進行適當的場景操作時遇到了一些問題。在我的屏幕上,我想繪製一個矩形和一個立方體。應將矩形移至底部並縮放,同時將立方體移至頂部並縮放。更重要的是,我想在所有3軸上旋轉這個立方體。修改場景中的多個對象時的Android OpenGL es 2.0錯誤
這是我創建至今:
@Override
public void onDrawFrame(GL10 gl) {
float[] scratch = new float[16];
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
Matrix.setLookAtM(viewMatrix, 0, 0, 0, -6, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.multiplyMM(MVPMatrix, 0, projectionMatrix, 0, viewMatrix, 0);
Matrix.translateM(scratchMatrix1, 0, 0, -1.1f, 0);
Matrix.scaleM(scratchMatrix3, 0, 0.5f, 0.5f, 0.5f);
Matrix.multiplyMM(scratchMatrix2, 0, scratchMatrix1, 0, scratchMatrix3, 0);
Matrix.multiplyMM(scratch, 0, scratchMatrix2, 0, MVPMatrix, 0);
rectangle.draw(scratch);
Matrix.setRotateM(scratchMatrix1, 0, angleXVal, 1.0f, 0, 0);
Matrix.setRotateM(rotationMatrix, 0, angleYVal, 0, 1.0f, 0);
Matrix.multiplyMM(scratchMatrix2, 0, rotationMatrix, 0, scratchMatrix1, 0);
Matrix.setRotateM(rotationMatrix, 0, angleZVal, 0, 0, 1.0f);
Matrix.multiplyMM(scratchMatrix3, 0, rotationMatrix, 0, scratchMatrix2, 0);
Matrix.translateM(scratchMatrix1, 0, 0, 0.3f, 0);
Matrix.multiplyMM(scratchMatrix2, 0, scratchMatrix3, 0, scratchMatrix1, 0);
Matrix.scaleM(scratchMatrix1, 0, 0.8f, 0.8f, 0.8f);
Matrix.multiplyMM(scratchMatrix3, 0, scratchMatrix2, 0, scratchMatrix1, 0);
Matrix.multiplyMM(scratch, 0, scratchMatrix2, 0, MVPMatrix, 0);
cube.draw(scratch);
}
的問題是,當我旋轉立方體也矩形移動。這與立方體的縮放和平移相同 - 它拉長矩形。
對我來說,它看起來像矩陣連接的地方,但我沒有看到在哪裏,因爲矩形首先被繪製,刮傷矩陣後來被覆蓋。
我不知道這是隻添加不會覆蓋它。那麼只有'Matrix.rotateM()'在這裏覆蓋? – sebap123
multiplyMM和rotateM正在覆蓋。 translateM和scaleM應用於當前值。 – samgak