2016-04-05 13 views
1

Ben android opengl2 ile yeni biriyim ve bazı şeyleri test ettiğim bir uygulama yapıyorum. Şimdi bir küre nesnesini bir dokuyla çoğaltmaya çalışıyordum, bu yüzden aynı Matris Matrisi ve aynı projeksiyon matrisini kullanarak Model matrisine küçük bir çeviri uygulayarak MVP matrisimi değiştirmenin yeterli olduğunu düşündüm.Farklı pozisyonlarda iki model çizin opengl 2 android

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 türünde bir nesnedir. mMVPMatrix ve mMVPMatrix2, bahsettiğim MVP matrisleridir. MVP matrisini değiştirdim ve tekrar çizim yaptım. Sonuç olarak iki kürem var, ama bunlardan biri garip davranıyor, çarpık görünüyor, görünen pozisyon sağda, iki küre ilerliyor, ama bunlardan biri şekli değiştiriyor. Kaçırdığım ne

?, ben

Bu ... ?, aynı model olma, bu yeterli olduğunu düşündüğüm Bunu yapmadan önce benim kodunda bazı şeyleri çoğaltmak zorunda sanırım, ama Ben MVP matrisi nasıl değiştiğini:

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

mMVPMatrix2'yi nasıl değiştirdiniz? – BDL

cevap

0

nedenini bilmiyorum, ama yok mTempMatrix2 içine mModelMatrix2 klonlama ve Matrix.multiplyMM işlenenden yerine doğrudan mModelMatrix2 kullanmak gibi sorun çözüldü kullanarak

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

Birisi bir yorum gönderebilir ve bana neden güzel olacağını açıklayabilir. (Ben daha önce işlenen ile aynı matrisi kullandım ve sonuç sorunsuz bir şekilde kullandım)