我是android中的opengl2的新手,我正在制作一个应用程序,我正在测试一些东西。现在我试图用一个纹理复制一个球体对象,所以我认为这足以改变我的MVP矩阵,使用相同的View Matrix和相同的投影矩阵将一个小的平移应用到Model矩阵。
int[] numIndices = balon.getNumIndices();
ShortBuffer[] indices = balon.getIndices();
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0);
for (int j = 0; j < numIndices.length; j++) {
GLES20.glDrawElements(GLES20.GL_TRIANGLES,
numIndices[j], GLES20.GL_UNSIGNED_SHORT,
indices[j]);
}
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix2, 0);
for (int j = 0; j < numIndices.length; j++) {
GLES20.glDrawElements(GLES20.GL_TRIANGLES,
numIndices[j], GLES20.GL_UNSIGNED_SHORT,
indices[j]);
}
balon是Sphere类型的对象。 mMVPMatrix和mMVPMatrix2是我正在讨论的MVP矩阵。我只是改变了MVP矩阵并再次完成了绘图。 结果是我有两个球体,但其中一个表现奇怪,看起来扭曲,出现的位置是正确的,两个球体一直移动,但其中一个球体改变了它的形状。
我缺少什么?,我想在我这样做之前我必须在我的代码中复制一些东西,但是什么?,认为同样的模型,这就够了......
这就是我改变MVP矩阵的方式:
Matrix.setIdentityM(mModelMatrix, 0);
Matrix.setIdentityM(mModelMatrix2, 0);
Matrix.translateM(mModelMatrix, 0, posX, posY, posZ);
Matrix.translateM(mModelMatrix2, 0, posX+0.5f, posY+0.5f, posZ);
Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);
Matrix.multiplyMM(mMVPMatrix2, 0, mViewMatrix, 0, mModelMatrix2, 0);
Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
Matrix.multiplyMM(mMVPMatrix2, 0, mProjectionMatrix, 0, mMVPMatrix2, 0);
答案 0 :(得分:0)
我不知道为什么,但是将mModelMatrix2克隆到mTempMatrix2并将其用作Matrix.multiplyMM中的操作数而不是直接使用mModelMatrix2,解决了问题
float[] mTempMatrix2 = mModelMatrix2.clone();
Matrix.multiplyMM(mModelMatrix2, 0, mTempMatrix2, 0, mRotationMatrix, 0);
如果有人可以发表评论并解释我为什么会很酷。 (我想我之前使用的是与操作数相同的矩阵,结果没有问题)