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端缓冲

看到了么,这个概念是不是很相似?都是:

1.创建句柄

2.设置句柄类型

3.上传数据

4.开始使用缓冲

5.选择句柄

6.使用缓冲

7.停止使用缓冲

8. 删除句柄和缓冲

本文转载自:http://www.cppblog.com/w2001/archive/2008/05/10/49376.html

相关推荐