1.VBO(顶点缓冲对象 Vertex Buffer Objects ,VBO)
VBO:顶点缓冲对象,是在显卡存储空间中开辟出的一块内存缓存区,用于存储顶点的各类属性信息,如顶点坐标,顶点向量,顶点颜色数据等。在渲染时,可以直接从VBO取出顶点的各类属性数据,由于VBO在显存而不是在内存中,不需要从CPU传输数据,处理效率更高。
可以开辟很多个VBO,每个VBO在OpenGL中有它的唯一标识ID,这个ID对应这具体的VBO的显存地址,通过这个ID可以对特定的VBO内的数据进行存取操作
(1)创建VBO 开辟显存空间并分配VBO的ID
GLuint vboid;
glGenBuffers(1, &vboid);
原型: void glGenBuffers(GLsizei n, GLuint * buffers);
n:指定要生成的缓冲区对象名称的数量
buffers:指定存储生成的缓冲区对象名称的数组
(2)创建的VBO可用来保存不同类型的顶点数据,创建之后需要通过分配的ID绑定制定的VBO,对于同一类型的顶点数据一次只能绑定一个VBO。绑定操作通过glBindBuffer来实现;
glBindBuffer(GL_ARRAY_BUFFER, vboId);
原型: void glBindBuffer(GLenum target, GLuint buffer);
target:表示目标缓冲类型
buffer:缓冲对象名字
target分类:
GL_ARRAY_BUFFER,
GL_ATOMIC_COUNTER_BUFFER,
GL_COPY_READ_BUFFER,
GL_COPY_WRITE_BUFFER,
GL_DRAW_INDIRECT_BUFFER,
GL_DISPATCH_INDIRECT_BUFFER,
GL_ELEMENT_ARRAY_BUFFER,
GL_PIXEL_PACK_BUFFER,
GL_PIXEL_UNPACK_BUFFER,
GL_QUERY_BUFFER,
GL_SHADER_STORAGE_BUFFER,
GL_TEXTURE_BUFFER,
GL_TRANSFORM_FEEDBACK_BUFFER,
GL_UNIFORM_BUFFER
注:以上类型,根据不同的OpenGL版本使用,我们今天用的是GL_ARRAY_BUFFER,用于顶点数组绑定,其他类型具体什么用法,在这不做多解释,想要更多了解的同学请移步OpenGL WIKI文档,会有更详细的解释https://www.khronos.org/opengl/wiki/Main_Page