OpenGL学习(2)——绘制三角形(补)

上一篇的补充,通过绘制三角形来完成矩形的绘制。此外,完成章节后练习。

绘制矩形

一个矩形由两个三角形组成,因此绘制矩形需要绘制两个三角形,一共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);

练习

猜你喜欢

转载自www.cnblogs.com/yiqian/p/10759358.html
今日推荐