0

如何在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);

这段代码对我不起作用。

4

1 回答 1

0

您应该在调用 glVertexAttribPointer 函数之前生成存储顶点颜色的 VBO 并将其绑定到数组缓冲区目标。

函数glVertexAttribPointer可以通过 2 种方式工作:

  • 您可以使用最后一个参数直接提供指向顶点属性数据的指针(在您的情况下为 TriangleColors) - 然后您根本不需要任何 VBO,但您还必须确保没有缓冲区绑定到数组调用函数时的缓冲区。

  • 另一方面,如果您希望使用顶点缓冲区对象,则必须确保在调用函数时将正确的 VBO 绑定到数组缓冲区目标 - 这会改变最后一个参数的含义;它现在成为当前绑定缓冲区的字节偏移量。

在你的情况下

GL.VertexAttribPointer((int)GLKVertexAttrib.Color,
                           3, VertexAttribPointerType.Float,
                           false, 0, 0);

您不提供指针,因此最后一个参数被视为数组缓冲区目标的字节偏移量(即没有偏移量);但是您的代码没有显示在该点是否绑定了任何 VBO - 只是您之后绑定了颜色 VBO 。

于 2013-05-13T10:47:55.653 回答