VBO(Vertex Buffer Object,顶点缓冲对象),可以认为是抽象的显存对象,其中包含着顶点(一个或多个)的位置和着色信息,类似: 1
x,y,z,r,g,b
但是当数据存储在VBO中时,OpenGL并不知道每一部分所代表的具体含义,因此需要借助VAO(Vertex Array Object,顶点数组对象)的帮助,即VAO中存储的数据规定了OpenGL如何理解VBO中的数据。 举个栗子: 假如VBO里面现在存放了如下的内容: 1
2
3x0, y0, z0, r0, g0, b0
x1, y1, z1, r1, g1, b1
x2, y2, z2, r2, g2, b2
VAO可以定义一种格式说,我每次只取VBO里面的x,y,z的值;也可以定义一种格式说,每次只取VBO里面的r,g,b的值。这样我们就可以在渲染的时候,绑定不同的VAO,实现按照不同的格式将VBO里面的东西渲染出来。
通过定义VBO里面数据存放的方式、VAO的格式以及合适的GLSL 语言,就能够灵活地画出我们所需要的各种图形。
最后附图解一张: