如何在opengl es 2.0中为顶点设置颜色?
现在我使用颜色数组:
float[] TriangleColors = new float[]{
1.0f, 1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
};
GL.EnableVertexAttribArray((int)GLKVertexAttrib.Color);
GL.VertexAttribPointer((int)GLKVertexAttrib.Color,
3, VertexAttribPointerType.Float,
false, 0, 0);
GL.GenBuffers(1, out colorBuffer);
GL.BindBuffer(BufferTarget.ArrayBuffer, colorBuffer);
GL.BufferData (BufferTarget.ArrayBuffer,
(IntPtr)(TriangleColors.Length * sizeof(float)),
TriangleColors,
BufferUsage.StaticDraw);
此代码对我不起作用。
答案 0 :(得分:0)
你应该生成存储顶点颜色和VB的VBO。在调用glVertexAttribPointer函数之前将它绑定到数组缓冲区目标。
函数glVertexAttribPointer可以两种方式工作:
你可以使用最后一个参数直接提供一个指向顶点属性数据的指针(在你的情况下是TriangleColors) - 那么你根本不需要任何VBO,但是你还必须确保那里有调用函数时没有缓冲区绑定到数组缓冲区。
另一方面,如果你想使用顶点缓冲区对象,你必须确保在调用函数时正确的VBO绑定到数组缓冲区目标 - 这改变了最后一个的含义参数;它现在成为当前绑定缓冲区的字节偏移量。
在你的情况下
GL.VertexAttribPointer((int)GLKVertexAttrib.Color,
3, VertexAttribPointerType.Float,
false, 0, 0);
你没有提供指针,所以最后一个参数被视为数组缓冲区目标的字节偏移量(即没有偏移量);但是你的代码没有显示是否有任何VBO甚至绑定在那一点 - 只是你之后绑定了颜色VBO 。