1. VBO(Vertex Buffer Object)顶点缓冲区对象
VBO为顶点缓冲区对象,是显卡存储空间里的一块缓存区(Buffer),用于存储顶点坐标/顶点uv/顶点法线/顶点颜色等数据信息。
2. VAO(Vertex Array Object)顶点数组对象
VAO是所有顶点数据的状态集合。它存储了顶点数据的格式以及顶点数据所需的缓存对象的引用,任何随后的顶性调用都会储存在这个VAO中。
3. EBO(Element Buffer Object)索引缓冲对象
和顶点缓冲对象一样,EBO也是一个缓冲,它专门储存索引,OpenGL调用这些顶点的索引来决定该绘制哪个顶点。
4. 三者联系与区别
VAO中存储着VBO的信息和EBO的信息,VBO和EBO存储的都是顶点的信息。一个VAO对应一个物体,一个VBO对应一个物品的所有属性
(顶点坐标、颜色等,除顶点索引外),而一个EBO仅对应一个物品的一种属性(顶点索引属性)。附图说明。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200923210557619.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODMxMzY4,size_16,color_FFFFFF,t_70#pic_center)
VAO1为物体1,有15个attribute pointer(属性调用指针,15意味着这个物体有15个顶点)。物体1的顶点坐标属性缓存在VBO1中,
而顶点索引属性缓存在EBO1中(其调用由element buffer object保存)。顶点0的坐标属性对应pos[0],
而pos[0]的调用由attribute pointer0保存。
VAO2为物体2,也有15个attribute pointer。物体2的顶点坐标、颜色属性缓存在VBO2,而顶点索引属性缓存在EBO2中。
顶点0的坐标属性对应pos[0],颜色属性对应col[0]。stride为同样属性之间的间隔。
正确的绑定顺序是VAO、VBO、EBO,将后两者的信息也绑定进VAO中去。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020092321061790.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODMxMzY4,size_16,color_FFFFFF,t_70#pic_center)
如果不使用VAO的话,那么在每次渲染时都要设置第4步(即设定顶点属性指针)。而用了VAO,就只需要在第一次渲染开始时绑定VAO即可,
大大减少了代码量。
参考:
几张图看明白VAO、VBO、EBO的关系和代码顺序