标签:重复 使用 类型 bin 需要 问题 个数 gen image
之前已经画了一个憨憨的三角形。如果是画由两个三角形组成的四边形的话......
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, // 右下角
-0.5f, -0.5f, 0.0f, // 左下角
-0.5f, 0.5f, 0.0f // 左上角
};
此时就会出现一个问题,我们指定右下角和左上角两次,就显得有一丝的多余。所以我们引入了索引缓冲对象( Element Buffer Object , EBO )( 也叫IBO,Index Buffer Object )的概念。
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开始!
0, 1, 3, // 第一个三角形
1, 2, 3 // 第二个三角形
};
unsigned int EBO;
glGenBuffers(1,&EBO);
//以上代码生成了一个EBO缓冲
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);
//以上代码把刚刚生成的EBO缓冲绑定到GL_ELEMENT_ARRAY_BUFFER目标上
glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices),indices,GL_STATIC_DRAW);
//以上代码的作用是把指点定义的索引顺序数据复制到缓冲中
和VBO类似,以上所有代码建立了顶点绘制顺序数据与EBO之间的联系,应为之前已经定义了VAO缓冲而且帮点了Element Buffer,也就建立了顶点绘制顺序与VAO之间的关系。
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO);
glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0);
( 代码照着上次的改一下就??辽~ )
https://paste.ubuntu.com/p/ZBt24n7wC6/
标签:重复 使用 类型 bin 需要 问题 个数 gen image
原文地址:https://www.cnblogs.com/LittleBanana/p/11872262.html