2011-06-27 308 views
0

我有一個大量的點,我正從一個文件讀取具有3D位置和RGB值。我努力通過Java + Android + OpenGL(ES)渲染這些圖像。OpenGL ES:頂點/顏色緩衝區/指針

我創建了一個頂點緩衝和顏色緩衝:

private FloatBuffer vertexBuffer, colorBuffer; 

引腳我的頂點緩衝區:

ByteBuffer vbb = ByteBuffer.allocateDirect(lasVertices.length * 4); 
vbb.order(ByteOrder.nativeOrder()); 
vertexBuffer = vbb.asFloatBuffer(); 
vertexBuffer.put(lasVertices); 
vertexBuffer.position(0); 

在我的平局(GL10 GL):

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glPointSize(3); 
gl.glDrawArrays(GL10.GL_POINTS, 0, 100); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 

它在屏幕上繪製了100點的小樣本,但沒有顏色。我已經固定的顏色到我上面創建的同時運行的代碼,因爲這樣的colorBuffer:在步驟與頂點的位置

lasColors[i*3] = array[i].red; 
lasColors[i*3+1] = array[i].green; 
lasColors[i*3+2] = array[i].blue; 

但如何呈現獨特的價值?

我想我所做的與位置:

vbb = ByteBuffer.allocateDirect(lasColors.length * 4); 
vbb.order(ByteOrder.nativeOrder()); 
colorBuffer = vbb.asFloatBuffer(); 
colorBuffer.put(lasColors); 
colorBuffer.position(0); 

,並顯示在我的繪製函數如下:

gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 

...但沒有得到任何結果。

謝謝你的幫助!

回答

1

嘗試啓用彩色陣列與頂點數組,並看看是否有效。

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
gl.glColorPointer(3, GL10.GL_FLOAT, 0, colorBuffer); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 
gl.glPointSize(3); 
gl.glDrawArrays(GL10.GL_POINTS, 0, 100); 
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
+0

我試過了,(並禁用了它)。但是沒有運氣:( – RedLeader

+0

嗯,你說的是,雖然它們都是相同的顏色,如果是這樣的話,是什麼顏色? – theisenp

+0

我做了一點挖掘,即使它不能解決你的整個問題,您必須根據[documentation](http://www.opengl.org/sdk/docs/man/xhtml/glColorPointer.xml)包含glEnableClientState()行。您也可以嘗試使用顏色的RGBA值代替只使用RGB,過去只使用3個值導致[others](http://www.machwerx.com/2009/01/26/glcolorpointer-size-must-be-4/)出現問題 – theisenp