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. 刪除句柄和緩沖
posted on 2008-05-10 00:31
w2001 閱讀(8231)
評論(4) 編輯 收藏 引用