Opengl_On_Vs_2_頂點緩存對象-創(chuàng)新互聯(lián)

1,查看當(dāng)前opengl版本


2,glew
the OpenGL Extension Wrangler Library. GLEW helps you deal with the headache that can accompany the management of extensions in OpenGL. Once initialized it queries for all the available extensions on your platform, dynamically loads them and provides easy access via a single header file.
If you include other OpenGL headers you must be careful to include this file before the others else GLEW will complain that about it.

3,
GL_ARB_vertex_buffer_object 擴展致力于提供頂點數(shù)組與顯示列表的優(yōu)勢來提升OpenGL效率,同時避免它們實現(xiàn)上的不足。
頂點緩存對象(VBO)準(zhǔn)許頂點數(shù)組數(shù)據(jù)存放在服務(wù)端的高性能顯卡內(nèi)存中,且提供高效數(shù)據(jù)傳輸。如果緩存對象用于保存像素數(shù)據(jù),就被稱為像素緩存對象(PBO)。
使用頂點數(shù)組可以降低函數(shù)調(diào)用次數(shù)與降低共享頂點的重復(fù)使用。
可以在多個客戶端共享緩存數(shù)據(jù)。因為VBO處在服務(wù)器端,多個客戶端可以通過相應(yīng)的標(biāo)示符訪問同一個緩存。

4,創(chuàng)建VBO需要3個步驟:
使用glGenBuffers()生成新緩存對象。
使用glBindBuffer()將緩存對象連接到相應(yīng)的緩存上。
使用glBufferData()將頂點數(shù)據(jù)拷貝到緩存對象中。

void glGenBuffers(GLsizei n, GLuint* buffers);
void glBindBuffer(GLenum target, GLuint buffer);
void glBufferData(GLenum target,GLsizeiptr size, const GLvoid* data, GLenum usage);

void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
與glBufferData()類似,glBufferSubData()用于向VBO中拷貝數(shù)據(jù),不過它僅僅將從給定offset開始的一定范圍的數(shù)據(jù)替換到現(xiàn)存緩存中。(在使用glBufferSubData()之前,整個緩存必須由glBufferData()指定。)

void glDeleteBuffers(GLsizei n, const GLenum* bufs);





glEnableVertexAttribArray(0);
加載到buffer中的頂點位置在固定功能管線中是被認(rèn)為是索引為0的頂點屬性(當(dāng)沒有著色器綁定時被啟用)。
必須開啟每一個頂點的屬性,否則渲染管線無法獲取這些數(shù)據(jù)。

glBindBuffer(GL_ARRAY_BUFFER, VBO);
這里我們再次綁定我們的buffer準(zhǔn)備開始draw call回調(diào)。
在這個小程序中我們每一幀都調(diào)用這個回調(diào)是很冗余的,在更加復(fù)雜的程序中,將會有很多的buffer緩沖來存儲不同的模型,則需要Bind要調(diào)用的Buffer來不斷更新管線的狀態(tài)。

公司主營業(yè)務(wù):成都做網(wǎng)站、成都網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出達(dá)坂城免費做網(wǎng)站回饋大家。

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
這個回調(diào)告訴管線怎樣解析bufer中的數(shù)據(jù)。
第1個參定義了屬性的索引,再這個例子中我們知道這個索引默認(rèn)是0,但是當(dāng)我們開始使用shader著色器的時候,我們既要明確的設(shè)置著色器中的屬性索引同時也要檢索它;
第2個參數(shù)指的是屬性中的元素個數(shù)(3個表示的是:X,Y,Z坐標(biāo));
第3個參數(shù)指的是每個元素的數(shù)據(jù)類型;
第4個參數(shù)指明我們是否想讓我們的屬性在被管線使用之前被單位化,我們這個例子中希望我們的數(shù)據(jù)保持不變的被傳送;
第5個參數(shù)(稱作'stride')指的是緩沖中那個屬性的兩個實例之間的比特數(shù)距離。當(dāng)只有一個屬性(例如:buffer只含有一個頂點的位置數(shù)據(jù))并且數(shù)據(jù)被緊密排布的時候?qū)⒃搮?shù)值設(shè)置為0。如果我們有一個包含位置和法向量(都是有三個浮點數(shù)的vector向量,一共6個浮點數(shù))兩個屬性的數(shù)據(jù)結(jié)構(gòu)的數(shù)組的時候,我們將設(shè)置參數(shù)值為這個數(shù)據(jù)結(jié)構(gòu)的比特大?。?*4=24);
最后一個參數(shù)在前一個例子中非常有用。我們需要在管線發(fā)現(xiàn)我們的屬性的地方定義數(shù)據(jù)結(jié)構(gòu)中的內(nèi)存偏移值。在有位置數(shù)據(jù)和法向量數(shù)據(jù)的結(jié)構(gòu)中,位置的偏移量為0,而法向量的偏移量則為12。

5,
可見的點必須在這個盒子內(nèi),這樣他們將可以通過視窗的變換映射到窗口中可見的坐標(biāo)上。當(dāng)俯視Z坐標(biāo)軸的負(fù)方向時這個單位化盒子看上去如下圖:

網(wǎng)站欄目:Opengl_On_Vs_2_頂點緩存對象-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article4/dieiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站標(biāo)簽優(yōu)化、電子商務(wù)、品牌網(wǎng)站設(shè)計、營銷型網(wǎng)站建設(shè)、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)