数据科学与计算机学院 徐海洋
本学习基于 LearnOpenGL 。
OpenGL 的图形渲染管线(Graphics Pipeline)主要有两个主要任务:
- 把 3D 坐标转换成 2D 坐标;
- 把 2D 坐标转变为实际有颜色的像素。
现代的可编程之处在于下图所示的蓝色部分,可注入自定义的着色器。
顶点缓冲对象(Vertex Buffer Objects,VBO)
其用来管理 GPU 上存储顶点数据的内存(简单的数组)。
假设存在一组顶点数据:
float points[] = {
0.0f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
-0.5f, -0.5f, 0.0f
};
如下为根据缓冲 ID 生成 VBO 对象,并绑定缓冲类型和复制顶点数据到缓冲的内存中。
GLuint points_vbo = 0;
glGenBuffers(1, &points_vbo);
glBindBuffer(GL_ARRAY_BUFFER, points_vbo);
glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(float), points, GL_STATIC_DRAW);
顶点数组对象(Vertex Array Object,VAO)
首先,一个顶点数组对象会存储以下这些内容:
glEnableVertexAttribArray
和glDisableVertexAttribArray
的调用。- 通过
glVertexAttribPointer
设置的顶点属性配置。 - 通过
glVertexAttribPointer
调用与顶点属性关联的顶点缓冲对象。
假设还存在一组颜色数据,同样地使用 VBO 来存储:
float colours[] = {
1.0f, 0.0f, 0.0f,
0.0f, 1