OpenGL學習筆記之Buffers

2021-07-26 16:37:59 字數 1600 閱讀 9858

用buffers來填充頂點著色器的資料,下面是主要的**片段。好幾次編譯不過是因為:
1.我的openggl glsl為4.4,還無法支援4.5新增的函式(如glnamedbufferstorage()), 需要glbindbuffer()配合glbufferstorage()為buffer初始化。

2.glbindvertexbuffer() 引數stride是緩衝區內各個頂點屬性資料的間隔長度,因此長度是 8*sizeof(gl_float) 而不是 4*sizeof(gl_float)

struct

vertex

;gluint

vao;

gluint

vbo;

gluint

buffer;

static

const

vertex

vertices =

, }

,

, }

,

, }};

glgenvertexarrays(1, &vao);

glbindvertexarray(vao);

glgenbuffers(1, &buffer);

//我的版本是4.4, 無法使用glnamedbufferstorage, 所以需要glbindbuffer

glbindbuffer(gl_array_buffer, buffer);

glbufferstorage(gl_array_buffer, sizeof(vertices), vertices, gl_map_read_bit);

// 描述資料的layout與format

glvertexattribformat(0, 4, gl_float, gl_false, offsetof(vertex, position[0]));

//bind

abuffertoa

vertex

buffer

bind

point

glbindvertexbuffer(0, buffer, 0, 8 * sizeof(gl_float));

// 關聯 vertex

attribute 與 vao的 vertex

buffer 的繫結

glvertexattribbinding(0, 0);

glvertexattribformat(1, 4, gl_float, gl_false, offsetof(vertex, color[0]));

glbindvertexbuffer(0, buffer, 0, 8 * sizeof(gl_float));

glvertexattribbinding(1, 0);

// 允許通用頂點屬性陣列

glenablevertexattribarray(0);

glenablevertexattribarray(1);

glbindvertexarray(0);

編譯後截圖:

OpenGL學習筆記之了解OpenGL

opengl 全寫open graphicslibrary 是個定義了乙個跨程式語言 跨平台的程式設計介面規格的專業的圖形程式介面。它用於三維影象 二維的亦可 是乙個功能強大,呼叫方便的底層圖形庫。說白了,就是opengl是乙個開放的三維圖形軟體包,它獨立於視窗系統和作業系統,以它為基礎開發的應用程...

openGL之圓環 openGL學習筆記(七)

畫圓環的想法與畫球體的想法大致相同,不同的是,圓環中間為空,而環體的直徑又相同,所以通過設定兩個半徑,用兩個半徑和角度就可以確定每個點的x,y,z座標。首先,還是先把環體切成幾個部分,每個部分開啟之後都是乙個矩形,把每個矩形都用畫三角形帶的方式繪製出來的話,那麼圓環就可以實現。接下來就是座標的計算 ...

OPENGL學習筆記之八

2017 11 15 閱讀材料來自learnopengl.com以及learnopengl cn.github.io 我們通常會自己設定乙個座標的範圍,之後再在頂點著色器中將這些座標變換為標準化裝置座標 normalized device coordinate,ndc 然後將這些標準化裝置座標傳入光...