OpenGL VBO顶点缓冲的使用
2015-06-10 17:20
274 查看
转自w2001-OpenGL VBO顶点缓冲的使用
OpenGL VBO并不难,但是较繁琐,其实其概念跟加载纹理是一样的:
初始化阶段:
1. glGenBuffersARB(1, &nVBOVertices); //生成一个句柄
2. glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //声明该句柄为一个vbo句柄,并选择之
3. glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices,GL_STATIC_DRAW); //将顶点集上传至server端
使用阶段:
1. glEnableClientState(GL_VERTEX_ARRAY); //开始使用vbo
2. glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //选择当前使用的vbo
3. glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); //指定vbo顶点格式
4. glDrawArrays( GL_TRIANGLES, 0, g_pMesh->m_nVertexCount ); //画吧
5. glDisableClientState(GL_VERTEX_ARRAY); //停止使用vbo
收尾阶段:
1. glDeleteBuffersARB(1,&nVBOVertices); //删除句柄,同时删除server端顶点缓冲
再来看看纹理缓冲是怎么使用的,其实差不多:
初始化阶段:
1. glGenTextures(1, &texID);//创建句柄
2. glBindTexture(GL_TEXTURE_2D, texID); //设置句柄类型
3. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->GetWidth(), img->GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, raw_rgba); //上传纹理缓冲
使用阶段:
1. glEnable(GL_TEXTURE_2D); //开始使用纹理缓冲
2. glBindTexture(GL_TEXTURE_2D, texID); //选择当前使用的纹理缓冲
3. 发送顶点和纹理坐标,画吧…省略
4. glDisable(GL_TEXTURE_2D); //停止使用纹理
收尾阶段:
1. glDeleteTextures(1,&texID);//删除句柄,,同时删除server端缓冲
看到了么,这个概念是不是很相似?都是:
创建句柄
设置句柄类型
上传数据
开始使用缓冲
选择句柄
使用缓冲
停止使用缓冲
删除句柄和缓冲
OpenGL VBO并不难,但是较繁琐,其实其概念跟加载纹理是一样的:
初始化阶段:
1. glGenBuffersARB(1, &nVBOVertices); //生成一个句柄
2. glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //声明该句柄为一个vbo句柄,并选择之
3. glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices,GL_STATIC_DRAW); //将顶点集上传至server端
使用阶段:
1. glEnableClientState(GL_VERTEX_ARRAY); //开始使用vbo
2. glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //选择当前使用的vbo
3. glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0)); //指定vbo顶点格式
4. glDrawArrays( GL_TRIANGLES, 0, g_pMesh->m_nVertexCount ); //画吧
5. glDisableClientState(GL_VERTEX_ARRAY); //停止使用vbo
收尾阶段:
1. glDeleteBuffersARB(1,&nVBOVertices); //删除句柄,同时删除server端顶点缓冲
再来看看纹理缓冲是怎么使用的,其实差不多:
初始化阶段:
1. glGenTextures(1, &texID);//创建句柄
2. glBindTexture(GL_TEXTURE_2D, texID); //设置句柄类型
3. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img->GetWidth(), img->GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, raw_rgba); //上传纹理缓冲
使用阶段:
1. glEnable(GL_TEXTURE_2D); //开始使用纹理缓冲
2. glBindTexture(GL_TEXTURE_2D, texID); //选择当前使用的纹理缓冲
3. 发送顶点和纹理坐标,画吧…省略
4. glDisable(GL_TEXTURE_2D); //停止使用纹理
收尾阶段:
1. glDeleteTextures(1,&texID);//删除句柄,,同时删除server端缓冲
看到了么,这个概念是不是很相似?都是:
创建句柄
设置句柄类型
上传数据
开始使用缓冲
选择句柄
使用缓冲
停止使用缓冲
删除句柄和缓冲
相关文章推荐
- 【VBScript】MsgBox()函数
- GT的使用及耗电量统计的原理,对GT采集的电池数据采用VBA分析
- Live555转发DVB实时流数据
- COM学习笔记2_COM接口vbtl内存布局
- [史上最全]C#(VB.NET)中位运算符工作过程剖析(译)
- IIS6常用的MIME类型[rmvb,mp3,zip,exe等文件]
- VB.NET 读取写入XML文件
- VB.Net中Socket异步编程的实例
- visual basic对文件夹下的excel执行批量删除行操作
- VB笔记
- 【VB6】文件拖拽技术
- VB.net 中 ADODB的RecordSet 的使用实例说明
- 【VB6】使用VB6创建和访问Dom树【爬虫基础知识】
- 【VB.NET机房重构】DataGridView数据显示
- Visual Basic .NET で ADO レコードセットを使用する方法
- Genymotion 出现无法找到vbox的错误解决方案
- IEEE 802.1 AVB 相关协议简介
- vbs查看系统开关机时间
- 【VB.NET机房重构】编程注释
- vb timer控件