wanghualin0 2012-03-20
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