对上一篇的补充,通过绘制三角形来完成矩形的绘制。此外,完成章节后练习。
绘制矩形
一个矩形由两个三角形组成,因此绘制矩形需要绘制两个三角形,一共6个顶点,其中2个顶点重复画了两次。
为了减小开销,仅储存矩形的4个顶点来完成绘制,需要使用Element Buffer Object按照绘制顺序存储顶点索引。
举例说明:矩形四个顶点(a, b, c, d),EBO中存储的索引为(0, 1, 2, 0, 2, 3),表示矩形由三角形abc和acd组成。
创建和配置EBO的方法与VBO类似:
初始化顶点和索引数组
float vertices[] = {0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f};
unsigned int indices[] = {0, 1, 2,
1, 2, 3};
创建EBO
unsigned int EBO;
glGenBuffers(1, &EBO);
配置EBO
同样可以通过绑定VAO来保存EBO的配置。
但要注意,和VBO不同的是,在解绑VAO之前,不可以解绑EBO。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
渲染循环
在使用EBO时,调用glDrawElements函数代替glDrawArrays函数。
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);