2017.08.05 vao和vbo使用
来源:互联网 发布:大数据的主要来源于 编辑:程序博客网 时间:2024/06/05 20:26
强烈推荐http://www.zwqxin.com/archives/opengl/vao-and-vbo-stuff.html
一.vbo使用
1.初始化阶段
glGenBuffers(1, &g_ArrayBuffer);
glBindBuffer(GL_ARRAY_BUFFER, g_ArrayBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(MyVertex) * 3, NULL, GL_STREAM_DRAW);//确定array大小
/******/
VBO允许usage标示符取以下9种值:
GL_STATIC_DRAW_ARB
GL_STATIC_READ_ARB
GL_STATIC_COPY_ARB
GL_DYNAMIC_DRAW_ARB
GL_DYNAMIC_READ_ARB
GL_DYNAMIC_COPY_ARB
GL_STREAM_DRAW_ARB
GL_STREAM_READ_ARB
GL_STREAM_COPY_ARB
"Static”意味着VBO中的数据不会被改变(一次修改,多次使用)
"dynamic”意味着数据可以被频繁修改(多次修改,多次使用)
"stream”意味着数据每帧都不同(一次修改,一次使用)。"Draw”意味着数据将会被送往GPU进行绘制,"read”意味着数据会被用户的应用读取,"copy”意味着数据会被用于绘制和读取。注意在使用VBO时,只有draw是有效的,而copy和read主要将会在像素缓冲区(PBO)和帧缓冲区(FBO)中发挥作用。
2.rendering阶段
glGenVertexArrays(1,&g_VertexArray);
glBindVertexArray(g_VertexArray);
glBindBuffer(GL_ARRAY_BUFFER, g_ArrayBuffer);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(MyVertex) * 3, &verts[0].x);
glEnableVertexAttribArray(ATTRIB_POSITION);
glVertexAttribPointer(ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE, sizeof(MyVertex),BUFFER_OFFSET(0));
glEnableVertexAttribArray(ATTRIB_COLOR);
glVertexAttribPointer(ATTRIB_COLOR, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(MyVertex),BUFFER_OFFSET(sizeof(float) * 3));
glDrawArrays(GL_TRIANGLES, 0, 3);
代码如上:
1.先绑定vao,就是glGenVertexArrays,glBindVertexArray
2. 绑定对应的vbo,对应的是glBindBuffer。其中glBufferSubData是更新部分buffer data
3.设置数据格式、内容。对应glEnableVertexAttribArray、glVertexAttribPointer.
4.绘制。对应的是glDrawArrays,如果有索引,就是glDrawElements。
5.ps.如果存在不同缓冲区,则写成下面形式:
- glGenBuffers(1, &m_nQuadPositionVBO);
- glBindBuffer(GL_ARRAY_BUFFER, m_nQuadPositionVBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(fQuadPos), fQuadPos, GL_STREAM_DRAW);
- glEnableVertexAttribArray(VAT_POSITION);
- glVertexAttribPointer(VAT_POSITION, 2, GL_INT, GL_FALSE, 0, NULL);
- //上面为顶点信息,下面为纹理信息
- glGenBuffers(1, &m_nQuadTexcoordVBO);
- glBindBuffer(GL_ARRAY_BUFFER, m_nQuadTexcoordVBO);
- glBufferData(GL_ARRAY_BUFFER, sizeof(fQuadTexcoord), fQuadTexcoord, GL_STREAM_DRAW);
- glEnableVertexAttribArray(VAT_TEXCOORD);
- glVertexAttribPointer(VAT_TEXCOORD, 2, GL_INT, GL_FALSE, 0, NULL);
- 2017.08.05 vao和vbo使用
- VBO和VAO
- 使用VAO VBO绘制图形
- OpenGL进阶(九) - GLSL中VAO和VBO的使用
- OpenGL进阶(九) - GLSL中VAO和VBO的使用
- OpenGL ES VBO 和 VAO
- OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
- OpenGL中常用函数详解和VBO VAO详解以及VAO的使用
- OpenGL中的VBO与VAO的使用
- 使用vbo、vao、ebo画三角形
- VA、VAO和VBO API备忘
- VA、VAO和VBO API备忘
- VA、VAO和VBO API备忘
- 多个顶点属性使用一个类型的VBO & VAO的使用和操作
- OpenGL(二十四) VAO、VBO和着色器使用示例
- VBO,VAO、glVertexPointer()、glVertexAttribPointer()
- VBO与VAO
- VAO与VBO
- MySQL与SQLite的区别及迁移
- 2017.08.05【NOIP提高组】模拟赛B组小结
- 数组---二分查找
- 关于复选框全选,全不选以及使用按钮传值
- bzoj1668 [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富(dp)
- 2017.08.05 vao和vbo使用
- python面向对象笔记
- 匈牙利算法模板(无算法讲解)
- div+css实现简单幻灯片动画
- DBCP-template
- 【LeetCode】006.ZigZag Conversion
- C#中如何获取一个二维数组的两维长度,即行数和列数?
- linux中的find查找命令
- redux中间件的认识