情况:我正在使用 C# 中的 OpenGL 和 OpenTK 库进行绘图。
.
问题:我无法选择要绘制哪一个缓冲区/顶点集。
.
设置功能:
var vertices = new Vertex[..];
创建顶点
foreach( .. )
{
Byte4 color = new Byte4();
color.R = 255;
color.G = 0;
color.B = 0;
color.A = 100;
Vertex vertex;
vertex.Position = new Vector3(.....);
vertex.Color = color;
vertices[index] = vertex;
}
生成/绑定缓冲区。
vbo_size = vertices.Length;
GL.GenBuffers(1, out vbo_id);
GL.BindBuffer(BufferTarget.ArrayBuffer, vbo_id);
GL.BufferData<Vertex>(BufferTarget.ArrayBuffer, (IntPtr)(vbo_size * Vertex.SizeInBytes), vertices, BufferUsageHint.StaticDraw);
GL.InterleavedArrays(InterleavedArrayFormat.C4ubV3f, 0, IntPtr.Zero);
*如果这很重要, Vertex.SizeInBytes为 16。
.
渲染代码:
GL.Enable(EnableCap.DepthTest);
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
..
GL.Enable(EnableCap.ColorArray);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
GL.Disable(EnableCap.ColorArray);
..
glControl1.SwapBuffers();
.
id喜欢做什么:
在设置代码中,我创建了我的顶点(顶点包括位置和颜色)。我现在创建了一组,但我想再创建一组(只是具有不同颜色值的相同代码)。我这样做了,当然可以创建它并将其绑定到辅助缓冲区(vbo_id/vbo_secondary_id)。但是我怎么画呢?
我正在寻找这样的东西:
RenderNormalColors()
{
GL.UseVboId(vbo_id);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
}
RenderAlternativeColors()
{
GL.UseVboId(vbo_id_secondary);
GL.DrawArrays(BeginMode.Points, 0, vbo_size);
}
GL.DrawArrays 似乎在不控制绘制内容的情况下获取所有内容。
除了颜色之外,顶点/数组中的所有内容都将/是相同的。我只需要用另一个“配色方案”渲染相同的对象——数千个点。
任何帮助都将不胜感激。