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