CSharpGL(7)对VAO和VBO的封装

由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了。CSharpGL源码中包含10多个独立的Demo,更适合入门参考。

为了尽可能提升渲染效率,CSharpGL是面向Shader的,因此稍有难度。

VAO(VBO)

在legacy OpenGL中,渲染图形是用glVertex()之类的方式实现的。

在modern OpenGL中,则是用VAO和VBO来存储图形信息以备渲染的。

VBO(Vertex Buffer Object)是用来存储顶点属性的对象。VBO就像一个定长的数组(SomeType[] vbo = new SomeType[100];),只不过是存贮于GPU内存里。我们在编码时可以通过一个代表它的指针来操作它。

VAO(Vertex Array Object)是用来管理VBO的渲染流程的。简单地说,就是让VAO看一次各个VBO是如何完成一次渲染工作的,VAO就记住了这个过程。以后就可以仅借助VAO来完成渲染过程。这就减少了DrawCall。

如果你没有使用过modern OpenGL,没有使用过VBO,那么现在看下文是无意义的。你可以先下载(https://github.com/bitzhuwei/CSharpGL)和稍微浏览一下其中的代码,之后再看本文是如何封装VAO和VBO的。

OpenGL告诉你应该这样用VBO

首先来仔细观察OpenGL提供的使用VBO的方式。

下图是CSharpGL中的一个渲染四面体的例子。我就以渲染这个四面体为例。

CSharpGL(7)对VAO和VBO的封装

 

给出顶点属性

我们给出这个四面体的顶点数据。其中每3个连续的顶点代表一个三角形,显然这里有4个三角形。

 1         /// <summary>
 2         /// 金字塔的posotion array.
 3         /// </summary>
 4         static vec3[] positions = new vec3[]
 5     {
 6         new vec3(0.0f, 1.0f, 0.0f),
 7         new vec3(-1.0f, -1.0f, 1.0f),
 8         new vec3(1.0f, -1.0f, 1.0f),
 9         new vec3(0.0f, 1.0f, 0.0f),
10         new vec3(1.0f, -1.0f, 1.0f),
11         new vec3(1.0f, -1.0f, -1.0f),
12         new vec3(0.0f, 1.0f, 0.0f),
13         new vec3(1.0f, -1.0f, -1.0f),
14         new vec3(-1.0f, -1.0f, -1.0f),
15         new vec3(0.0f, 1.0f, 0.0f),
16         new vec3(-1.0f, -1.0f, -1.0f),
17         new vec3(-1.0f, -1.0f, 1.0f),
18     };

 

有了顶点的位置,下面给出每个顶点的颜色。

 1         /// <summary>
 2         /// 金字塔的color array.
 3         /// </summary>
 4         static vec3[] colors = new vec3[]
 5     {
 6         new vec3(1.0f, 0.0f, 0.0f),
 7         new vec3(0.0f, 1.0f, 0.0f),
 8         new vec3(0.0f, 0.0f, 1.0f),
 9         new vec3(1.0f, 0.0f, 0.0f),
10         new vec3(0.0f, 0.0f, 1.0f),
11         new vec3(0.0f, 1.0f, 0.0f),
12         new vec3(1.0f, 0.0f, 0.0f),
13         new vec3(0.0f, 1.0f, 0.0f),
14         new vec3(0.0f, 0.0f, 1.0f),
15         new vec3(1.0f, 0.0f, 0.0f),
16         new vec3(0.0f, 0.0f, 1.0f),
17         new vec3(0.0f, 1.0f, 0.0f),
18     };
View Code

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-26
  • 2021-08-01
  • 2022-12-23
  • 2021-05-09
  • 2022-12-23
猜你喜欢
  • 2021-05-15
  • 2021-12-16
  • 2021-11-15
  • 2021-06-16
  • 2022-01-19
  • 2022-12-23
相关资源
相似解决方案