如何着色顶点?

时间:2013-05-13 10:15:17

标签: c# xamarin.ios opengl-es-2.0 opentk

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

此代码对我不起作用。

1 个答案:

答案 0 :(得分:0)

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

函数glVertexAttribPointer可以两种方式工作:

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

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

在你的情况下

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

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