LearnOpenGL VAO VBO EBO
2020-09-14 本文已影响0人
li_礼光
VAO VBO EBO 的关系
------------------------
| VBO |
| -------------------- |
| | VAO | |
| -------------------- |
| -------------------- |
| | VAO | |
| -------------------- |
| -------------------- |
| | VAO | |
| -------------------- |
| -------------------- |
| | VAO | |
| -------------------- |
| .... |
| .... |
| |
------------------------
| -------------------- |
| | EBO | |
| -------------------- |
可以理解为EBO是最后一个VBO, EBO是专门用来处理索引的
有的教程说EBO是最后一个特殊的VAO, 也可以这么理解吧, EBO是放在整个内存的最后面. 但从代码的绑定方法来看, EBO的创建方式和VBO的又是样的. 也可以理解为紧挨着VBO的特殊的VBO吧.
(后面再深刻整理下EBO)
//创建VBO
glGenBuffers(1, &VBO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertices), squareVertices, GL_STATIC_DRAW);
//创建VAO
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
//创建EBO, 这里的EBO相当于索引的作用
glGenBuffers(1, &EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(squareIndices), squareIndices, GL_STATIC_DRAW);
//解绑VAO
glBindVertexArray(0);
从代码分析来看, 这里面
VAO : glBindVertexArray
VBO : glBindBuffer
EBO : glBindBuffer
#define GL_ARRAY_BUFFER 0x8892
#define GL_ELEMENT_ARRAY_BUFFER 0x8893
首先VAO调用的绑定方法和VBO, VEO不一样.
绑定的buffer类型也不相同 GL_ARRAY_BUFFER和GL_ELEMENT_ARRAY_BUFFER
思路整理下就很容易理解了.