ElementButterObject
- ElementButter是指导如何组织vbo里的数据绘制图元的。如果没有ebo,在绘制图元的时候,是顺序调用vbo里的数据的。有了ebo之后就可以指定顺序调用了。
- 使用ebo的步骤:
- 声明ebo
- 定义ebo索引数据
- 设置当前的GL_ELEMENT_ARRAY_BUFFER为ebo
- 将ebo的索引数据从cpu的内存块发送到gpu的内存上去
- 设置当前的GL_ELEMENT_ARRAY_BUFFER为零
GLuint ebo; unsigned short indexes[] = { 0,1,2 };//按0,1,2的顺序绘制vbo里的点 glGenBuffers(1, &ebo);//创建一个ebo glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);//设置当前的element_buffer为ebo glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned short) * 3, indexes, GL_STATIC_DRAW);//将ebo从cpu的内存块传到显卡上去 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
- 在绘制图元的时候之前用vbo的glDrawArrays()接口就不用了,改为glDrawElements()。这个接口第一个参数表示要绘制的图元;第二个参数表示画多少个索引数据,也就是ebo里的索引数据用多少个;第三个参数表示ebo里的数据类型;第四个参数表示开始位置
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo); glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);