OpenGL VBO頂點緩衝的使用

2021-05-04 19:53:52 字數 1530 閱讀 3435

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_********s, 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

OpenGL VBO頂點緩衝的使用

opengl vbo頂點緩衝的使用 opengl vbo並不難,但是較繁瑣,其實其概念跟載入紋理是一樣的 初始化階段 1.glgenbuffersarb 1,nvbovertices 生成乙個控制代碼 2.glbindbufferarb gl array buffer arb,nvbovertice...

頂點屬性與頂點格式 頂點緩衝

頂點屬性與頂點格式 頂點可謂是3d世界中的基本元素。在計算機所能描繪的3d世界中,任何物體都是由多邊形構成的,可以是三邊形,也可以是四邊形等。由於三邊形,即三角形所具有的特殊性質決定其在3d世界中得到廣泛的使用。構成三角形需要三個點,這些點的性質就是這章所要講的內容。也許你已經知道頂點的結構定義,你...

自動計算頂點緩衝中所有頂點的法線

問題 當繪製自定義的結構時,你會發現光照不正確。這是因為你沒有指定正確的法線向量,顯示卡要求每個頂點都有法線資訊,這樣它才可以決定每個三角形獲得多少光照,詳細資訊可見第六章。為每個頂點計算法線向量看起來很複雜,因為大多數頂點被多個三角形共享。如果每個頂點只被乙個三角形使用,你只需找到三角形的法線向量...