小白學opengl 第五課 之 頂點緩衝物件

2021-10-07 20:48:31 字數 2209 閱讀 1728

本文參考

我們通過頂點緩衝物件(vertex buffer objects, vbo)管理記憶體,它會在gpu記憶體(通常被稱為視訊記憶體)中儲存大批頂點。使用這些緩衝物件的好處是我們可以一次性的傳送一大批資料到顯示卡上,而不是每個頂點傳送一次。

//頂點緩衝物件

gluint vbo;

//1 使用glgenbuffers函式生成乙個緩衝id

glgenbuffers(1, &vbo);

//2 使用glbindbuffer函式把新建立的緩衝繫結到gl_array_buffer緩衝型別上

glbindbuffer(gl_array_buffer, vbo);

struct vertexdata

;//vbo資料,頂點與顏色

vertexdata vc = , //1

, //2

, //3

, //4

//右面

, //2

, //5

, //6

, //3

//左面

, //1

, //8

, //7

, //4

//背面

, //5

, //6

, //7

, //8

//頂面

, //3

, //6

, //7

, //4

//底面

, //2

, //5

, //8

, //1

};

//3 把使用者定的義資料複製到當前繫結緩衝的函式

glbufferdata(gl_array_buffer, sizeof(vc), vc, gl_static_draw);

在渲染前指定opengl如何解釋頂點資料。

//4 鏈結頂點屬性

//indx: 屬性名

//size: 頂點大小

//type: 資料型別

//normalized:資料被標準化

//stride: 步長

//ptr: 資料在緩衝中起始位置的偏移量

glvertexattribpointer(m_posattr, 3, gl_float, gl_false, sizeof(vertexdata), (glvoid*)0);

glvertexattribpointer(m_colattr, 3, gl_float, gl_false, sizeof(vertexdata), (glvoid*)sizeof(qvector3d));

//5 開啟頂點屬性

glenablevertexattribarray(0);

//顏色值

glenablevertexattribarray(1);

//6 繪製四邊形

gldrawarrays(gl_quads, 0, 24);

//7 停用對應的頂點屬性陣列

opengl下原來是乙個個點繪製,所以使用vbo後能批量使用資料,區別明顯。

qt下我們本來就是使用陣列資料,換成vbo並沒有方便多少,那麼

//qt原技術

glvertexattribpointer(m_posattr, 3, gl_float, gl_false, 0, vertices);

是不是就是vbo技術呢???

//vbo

glvertexattribpointer(m_posattr, 3, gl_float, gl_false, sizeof(vertexdata), (glvoid*)0);

第五課 文法

1.名詞 場所 行 來 帰 使用移動動詞時,移動的方向用助詞 表示。京都 行 我要去京都。日本 來 我來到了日本。帰 我要回家。注 助詞 讀作 2.行 行 完全否定疑問詞所問的全部範疇時,用助詞 與否定形式一起使用。行 也不去。何 食 什麼也不吃。第6課 沒有任何人在。第10課 3.名詞 交通工具 ...

C語言第五課

主要內容 二維陣列 字串陣列 多維陣列 理解 一 二維陣列 有兩個下標的陣列稱為二維陣列 定義 型別修飾符 陣列名 常量表示式1 常量表示式2 第一維的長度 第二維的長度 示例 定義乙個2行3列的二維陣列 int array 2 3 這是乙個標準的二維陣列 二維陣列的元素也稱為雙下標變數 0 1 2...

C語言第五課

c函式若不宣告型別,則預設為 int 型 在函式中,指標可以 被調函式 修改 主調函式 1 int func int a main 2 void func int num main int num 2 func int b 野指標會 指向任一地方 int pum printf x pum 指標偏移的...