用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 然後將這些標準化裝置座標傳入光...