在opengl 2 android的不同位置绘制两个模型

时间:2016-04-05 09:56:04

标签: android opengl-es

我是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);

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是将mModelMatrix2克隆到mTempMatrix2并将其用作Matrix.multiplyMM中的操作数而不是直接使用mModelMatrix2,解决了问题

float[] mTempMatrix2 = mModelMatrix2.clone();
Matrix.multiplyMM(mModelMatrix2, 0, mTempMatrix2, 0, mRotationMatrix, 0);

如果有人可以发表评论并解释我为什么会很酷。 (我想我之前使用的是与操作数相同的矩阵,结果没有问题)