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

far*_*ich 2 graphics android 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();
Run Code Online (Sandbox Code Playgroud)

har*_*ism 5

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

如果您还没有完成本教程,那么本教程非常好.