VAO与VBO的相关操作
在OpenGL的学习中了解到了VAO与VBO的概念
什么是VBO
VBO是OpenGL指令告诉GPU在其显存中开辟一块指定大小的内存区间,其中存储片元的顶点数据等
//制作一个vbo,存放三角形的位置与颜色信息
//顶点数据
float ver[]={
-0.5f,-0.5f,0.0f,1.0f,0.0f,0.0f,
0.5f,-0.5f,0.0f,0.0f,1.0f,0.0f,
0.0f,0.5f,0.0f,0.0f,0.0f,1.0f
};GLuint vbo;//创建一个VBO,这时候没有实装
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo);//把这个vbo绑定到状态机上的vbo接口
//下面这一步才算实装,填入vbo数据(接口,大小,数据,数据使用方式)
glBufferData(GL_ARRAY_BUFFER,sizeof(ver),ver,GL_STATIC_DRAW);
什么是vao
vao是与vbo搭配使用的,他存放的是vbo的描述信息,比如上述的ver数组,我不说你知道他是什么吗,他有三排数据,每一排是一个顶点,前三个是float类型的坐标xyz,后面三个是颜色数据rgb,数据有的都是相对坐标,我记得是有个官方的名字叫什么系统坐标还是什么,忘了不重要,本质就是相对坐标系,xy的范围都是(-1,1),原点在屏幕中心,相对于屏幕的比例,这就是描述信息,告诉GPU怎么用这些数据,存在vao中
//创建绑定vao
GLuint vao =0;
glGenVertexArrays(1,&vao);
glBindVertexArray(vao);//绑定vbo,接下来设置的属性与这个buffer有关
glBindBuffer(GL_ARRAY_BUFFER,vbo);
//位置属性放在vao的0号位置,要先激活
glEnableVertexArray(0);
//位置属性放在0号位置,一个属性三个位置,属性数字是float,非归一化,步长(一个点有6个数据),顶点数据内部偏移
glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,6*sizeof(float),(void*)0);//颜色数据放在vao的1号位置,要先激活
glEnableVertexArray(0);
glVertexAttribPointer(1,3,GL_FLOAT,GL_FALSE,6*sizeof(float),(void*)(3*sizeof(float)));
数据内偏移量这里注意一下,指针每次都值指向点数据的头部位置,如果数据是混用在一块的要设置
最后可以加一句解除vao绑定
glBindVertexArray(0);
还只算了解,有什么不对的地方欢迎指正