2011-06-27 274 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