顶点数据
float firstTriangle[] = {
-0.9f, -0.5f, 0.0f, // left
-0.0f, -0.5f, 0.0f, // right
-0.45f, 0.5f, 0.0f, // top
};
float secondTriangle[] = {
0.0f, -0.5f, 0.0f, // left
0.9f, -0.5f, 0.0f, // right
0.45f, 0.5f, 0.0f // top
};
VAO和VBO配置部分
(1).创建VAO和VBO
(2).对每一个VAO进行单独的配置,流程如下:
- 绑定VBO(glBindVertexArray)
- 写入VBO数据(glBufferData)
- 规定VBO数据解析规则(glVertexAttribPointer)
- 启动应用(glEnableVertexAttribArray)
//创建VAO
unsigned int VAOs[2];
glGenVertexArrays(2, VAOs);
//创建VBO
unsigned int VBOs[2];
glGenBuffers(2, VBOs);
//绑定VAO
//配置VAO[0];
glBindVertexArray(VAOs[0]);
glBindBuffer(GL_ARRAY_BUFFER,VBOs[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(firstTriangle), firstTriangle, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
//glEnableVertexAttribArray表示启用该配置,0表示顶点属性位置值
glEnableVertexAttribArray(0);
//配置VAO[1];
glBindVertexArray(VAOs[1]);
glBindBuffer(GL_ARRAY_BUFFER, VBOs[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(secondTriangle), secondTriangle, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
//glEnableVertexAttribArray表示启用该配置,0表示顶点属性位置值
glEnableVertexAttribArray(0);
循环渲染部分
每次重新绑定顶点数组对象
// 第一个三角形
glBindVertexArray(VAOs[0]);
glDrawArrays(GL_TRIANGLES, 0, 3);
//第二个三角形
glBindVertexArray(VAOs[1]);
glDrawArrays(GL_TRIANGLES, 0, 3);