一、概述
目的:简单介绍一下VAO、VBO、EBO,使用他们能提高opengl的渲染效率
VAO:顶点数组对象(Vertex Array Object)
VAO就相当于一个管理者的角色,在GPU中创建一个VAO对象用于管理VBO、EBO。VBO和EBO创建绑定好后会自动挂到VAO下。
VBO:顶点缓冲对象(Vertex Buffer Object)
VBO顶点缓对象,在GPU中创建一个VBO对象,并在GPU中分配一块内存用于存储顶点数据。会一次性把顶点数据copy到GPU
EBO:元素缓冲对象/索引缓冲对象(Element Buffer Object)
EBO索引缓冲对象,在GPU创建一个EBO对象,并在GPU中分配索引缓冲区,用于把EBO定义的顶点索引copy到GPU。如果使用了EBO则绘制方法必须换成glDrawElement。
有了EBO,用户可以任意组合其所定义的顶点顺序。
二、代码示例
1.VAO使用
a.创建VAO
参数介绍:
第一个参数:代表创建几个VAO对象
第二个参数:创建的VAO的地址
glGenVertexArrays(1, &VAO);//创建VAO:顶点数组对象
b.绑定VAO
参数:上一步创建的VAO对象
//绑定VAO和VBO对象 glBindVertexArray(VAO);
c.删除VAO
glDeleteVertexArrays()
2.VBO使用
a.创建VBO
参数介绍:
第一个参数:创建多少个VBO
第二个参数:创建的具体的VBO
glGenBuffers(1, &VBO);//创建VBO:顶点数组缓冲
b.绑定VBO
参数介绍:
第一个参数:固定值,代表要创建一个数组缓冲区
第二个参数:上一步创建的VBO
glBindBuffer(GL_ARRAY_BUFFER, VBO);
c.给VBO分配内存
参数介绍:
第一个参数:固定值,要和上一步的对应起来
第二个参数:顶点数组总共占用多少个字节
第三个参数:要传给GPU的具体顶点数组的值
第四个参数:代表这个数组不经常变动
//把顶点数据放入缓冲区 glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
3.EBO的使用
1.创建EBO
参数介绍:
第一个参数:创建多少个EBO
第二个参数:创建的EBO对象
glGenBuffers(1, &EBO);//EBO元素索引缓冲,用来指定顶点应该如何排列和绘制
2.绑定EBO
第一个参数:固定值,代表要创建一个元素数组缓冲区
第二个参数:上一步创建的EBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
3.给EBO分配缓冲区(内存)
参数介绍:
第一个参数:固定值,要和上一步的对应起来
第二个参数:顶点数组总共占用多少个字节
第三个参数:要传给GPU的具体索引缓冲的具体数据
第四个参数:代表这个数组不经常变动
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
标签:VAO,创建,EBO,VBO,参数,顶点 From: https://www.cnblogs.com/tony-yang-flutter/p/18371247