OpenGL(ES)Android - 为什么这个glcolorpointer只有黑色?

时间:2011-05-08 21:40:07

标签: android graphics opengl-es

我正在尝试绘制渐变,但首先我只想让glcolorpointer工作。如果我使用glColor4f(...)它会正确地绘制颜色,但glcolorpointer只是绘制黑色。请帮忙


gl11.glPushMatrix();
//gl11.glColor4f(RGBBorder[0], RGBBorder[1], RGBBorder[2], alpha);
gl11.glBindBuffer(GL11.GL_ARRAY_BUFFER, vertexPointerCube);
gl11.glBindBuffer(GL11.GL_ELEMENT_ARRAY_BUFFER, indexPointerCube);

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);    
float colors[] = {.7f,.7f,.7f,.5f};
ByteBuffer vbb = ByteBuffer.allocateDirect(colors.length * 4);
vbb.order(ByteOrder.nativeOrder());
FloatBuffer buff = vbb.asFloatBuffer();
buff.put(colors);
buff.position(0);               

gl.glColorPointer(4, GL10.GL_FLOAT, 0, buff);
gl11.glVertexPointer(3, GL10.GL_FLOAT, 0, 0);
gl11.glDrawElements(GL11.GL_TRIANGLES, indicesCube, GL11.GL_UNSIGNED_SHORT, 0);

gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
gl11.glPopMatrix();

1 个答案:

答案 0 :(得分:5)

我认为问题在于您只为一个顶点添加颜色,并使buff太小而无法处理您拥有的所有顶点。使用你应该拥有的颜色缓冲区,在这种情况下,每个顶点有4个浮点数,乘以8(假设它是你正在绘制的一个立方体)。它应该与引入顶点坐标非常相似,即使我从未玩过GL11.glBindBuffer。这次有差异,它是你为每个顶点指定的颜色值。

This tutorial非常好读,如果你还没有这样做的话。