OPENGL VAO VBO使用步骤

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用VAO VBO的步骤

1、产生VAO

void glGenVertexArrays(GLsizei n,

GLuint*arrays);

n:要产生的VAO对象的数量。

arrays:存放产生的VAO对象的名称。

2、绑定VAO

void glBindVertexArray(GLuint array);

array:要绑定的顶点数组的名字。

3、产生VBOs

void glGenBuffers(GLsizei

n,

GLuint*buffers);

产生缓冲区对象的名称。

参数含义和glGenVertexArrays类似。

4、绑定VBOs

void glBindBuffer(GLenum

target,

GLuint buffer);

绑定一个缓冲区对象。

target可能取值是:GL_ARRAY_BUFFER,

GL_ELEMENT_ARRAY_BUFFER,GL_PIXEL_PACK_BUFFER,or

GL_PIXEL_UNPACK_BUFFER.

当进行绑定之后,以前的绑定就失效了。

5、给VBO分配数据:

void glBufferData(GLenum target,

GLsizeiptr size,

const GLvoid*data,

GLenum usage);

target可能取值为:GL_ARRAY_BUFFER(表示顶点数据),

GL_ELEMENT_ARRAY_BUFFER(表示索引数

据),GL_PIXEL_PACK_BUFFER(表示从OpenGL获取的的像素数据),or GL_PIXEL_UNPACK_BUFFER(表示传递给OpenGL的像素数据).

参数含义:

size:缓冲区对象字节数

data:指针:指向用于拷贝到缓冲区对象的数据。或者是NULL,表示暂时不分配数据。

6、定义存放顶点属性数据的数组:

首先需要启用VAO中对应的顶点属性数组:

void glEnableVertexAttribArray(GLuint index);

index:指定了需要启用的顶点属性数组的索引

注意:它只在OpenGL2.0及其以上版本才有。

7、给对应的顶点属性数组指定数据:

void glVertexAttribPointer(GLuint index,

GLint size,

GLenum type,

GLboolean normalized,

GLsizei stride,

const GLvoid*pointer);

index:要指定数据的顶点属性数组的索引。

size:每个顶点属性的数据个数。可能的取值是1、2、3或者4.初始值是4.

type:数组中每个数据的类型。可能的取值是:GL_BYTE,

GL_UNSIGNED_BYTE,GL_SHORT,GL_UNSIGNED_SHORT,GL_INT,

GL_UNSIGNED_INT,GL_FLOAT,or GL_DOUBLE。初始值是GL_FLOAT。normalized:指定顶点数在被访问的时候是否需要被归一化。

注意:如果有个非零的缓冲对象绑定到GL_ARRAY_BUFFER,那么pointer

就是对应的缓冲区对象的偏移量。

stride:两个连续顶点的属性之间的偏移量。

pointer:指向数组中的第一个顶点属性的第一个数据。

8、然后在进行渲染的时候,只需要绑定对应的VAO即可,操作起来十分方

便。

glBindVertexArray(vaoHandle);

9、使用完毕之后需要清除绑定。

glBindVertexArray(0);

事实上,在这个简单的程序中,不用VAO,只用VBO也一样可以实现。只是采用VAO可以进一步提升性能,而且在较新版本的OpenGL中不用VAO的方式会被逐渐废弃。

相关文档
最新文档