2010-08-31 27 views
2

我在Android上使用OpenGL ES來繪製一些形狀,因此我有一些Model類可以從.obj文件加載頂點等。重複調用glVertexPointer和glDraw

然後,每個模型都有一個onDrawFrame()方法,由Renderer調用它將其放置在場景中。

public void onDrawFrame(GL10 gl) { 
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
    gl.glEnable(GL10.GL_CULL_FACE); 
    gl.glFrontFace(GL10.GL_CCW); 
    gl.glCullFace(GL10.GL_BACK); 
    gl.glVertexPointer(0, GL10.GL_FLOAT, 0, mVerts); 
    gl.glDrawElements(GL10.GL_TRIANGLES, mFaces.capacity(), GL10.GL_UNSIGNED_BYTE, mFaces); 
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
} 

我的困惑,現在就是「重置」頂點指針(我認爲),因爲如果我嘗試創建使用2名新的綠黨新glVertexPointer的獨斷專行,並glDrawElements調用(GL_LINES)使用這些id,該行似乎總是使用原始數據中的vert 0和1。

我是否需要預先定義一個主場景中的所有場景的vert vertVertexPointer,並且讓每個模型都以合適的偏移量調用glDrawElements?或者我以某種方式清除指針?

回答

1

不知道這是否會解決你的問題,但你的glVertexPointer線應該是這樣的:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerts); 

由於每個頂點的3個座標。除此之外,您應該可以使用上述方法設置新指針。

+0

嗯,好的謝謝。它必須是我的模型類層次結構的其餘部分中的東西。 (glVertexPointer行被埋在我的類層次結構中更深一點,所以在運行的代碼中是正確的) 我將運行一些測試並嘗試縮小範圍。 – Cylindric 2010-08-31 20:38:32

+0

是的,你是否在做任何紋理或顏色分配?你應該把所有這些代碼放在onDrawFrame中,以便更容易保持一致的狀態,我肯定遇到了忘記禁用/啓用指針的問題。 – Frank 2010-08-31 20:45:30