2012-01-28 136 views
1

我在學習OpenGL ES 2.0 for Android,但是我發現很難找到好的介紹教程...我找到了This,但它只解釋了「glDrawArrays」而不是「 glDrawElements「...我試圖從我的模型加載類ES 1.1轉換代碼,但我覺得繪圖數組可能太慢...需要幫助瞭解GLD 2.0的glDrawElements

所以我問的是如何將以下轉換在ES 2.0中工作?

如何對象存儲(似乎是罰款):

private ShortBuffer SindexBuffer; 
private FloatBuffer SvertexBuffer; 
private FloatBuffer StexBuffer; 

private void initSprite() 
{ 
    float[] fcol = {1,1,1,1}; 
    float[] coords = { 
      0.5f, 0.5f, 0f, 
      -0.5f, 0.5f, 0f, 
      0.5f, -0.5f, 0f, 
      -0.5f, -0.5f, 0f 
      }; 
    short[] index = { 
      0,1,2, 
      1,3,2 
      }; 
    float[] texCoords ={ 
      0,1, 
      1,1, 
      0,0, 
      1,0 
     }; 

    //float has 4 bytes 
    ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4); 
    vbb.order(ByteOrder.nativeOrder()); 
    SvertexBuffer = vbb.asFloatBuffer(); 

    ByteBuffer tC = ByteBuffer.allocateDirect(texCoords.length * 4); 
    tC.order(ByteOrder.nativeOrder()); 
    StexBuffer = tC.asFloatBuffer(); 
    StexBuffer.put(texCoords); 
    StexBuffer.position(0); 

    //short has 2 bytes 
    ByteBuffer ibb = ByteBuffer.allocateDirect(index.length*2); 
    ibb.order(ByteOrder.nativeOrder()); 
    SindexBuffer = ibb.asShortBuffer(); 

    SvertexBuffer.put(coords); 
    SindexBuffer.put(index); 

    SvertexBuffer.position(0); 
    SindexBuffer.position(0); 

    ByteBuffer fbb = ByteBuffer.allocateDirect(fcol.length * 4); 
    fbb.order(ByteOrder.nativeOrder()); 
} 

以及它是如何繪製(這就是我需要幫助):

 public void drawSprite(GL10 gl, int tex) 
    { 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, tex);  
     //defines the vertices we want to draw 
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, SvertexBuffer); 
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, StexBuffer); 

     //Draw the vertices 
     gl.glDrawElements(GL10.GL_TRIANGLES, 6, GL10.GL_UNSIGNED_SHORT, SindexBuffer); 
     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
    } 

(雖然紋理部分ISN那麼重要呢......還沒有達到那個水平)。

感謝任何人誰可以幫助...哦,有沒有人知道任何簡單的介紹ES 2.0的Android瞄準誰使用1.1第一人?

+0

Can你明確說明你的問題是什麼?你讀過你鏈接的教程嗎?要轉到OpenGLES 2.0,您需要實現着色器,這在您的鏈接中進行了描述。我認爲你需要重讀這篇文章。 glDrawElements在OpenGL 2.0中保持不變。 – Tim 2012-04-20 17:53:10

回答

1

翻譯,因爲這

float[] coords = { 
     0.5f, 0.5f, 0f,  //index 0 
     -0.5f, 0.5f, 0f,  //index 1 
     0.5f, -0.5f, 0f,  //index 2 
     -0.5f, -0.5f, 0f  //index 3 
}  

你告訴使用點的這個序列是OpenGL的情節:

0,1,2,1,3,2

在這裏你節省內存因爲索引是短的類型,每個頂點需要3個浮點數

Regards