1,查看當前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)準許頂點數(shù)組數(shù)據(jù)存放在服務端的高性能顯卡內(nèi)存中,且提供高效數(shù)據(jù)傳輸。如果緩存對象用于保存像素數(shù)據(jù),就被稱為像素緩存對象(PBO)。
使用頂點數(shù)組可以降低函數(shù)調(diào)用次數(shù)與降低共享頂點的重復使用。
可以在多個客戶端共享緩存數(shù)據(jù)。因為VBO處在服務器端,多個客戶端可以通過相應的標示符訪問同一個緩存。
4,創(chuàng)建VBO需要3個步驟:
使用glGenBuffers()生成新緩存對象。
使用glBindBuffer()將緩存對象連接到相應的緩存上。
使用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中的頂點位置在固定功能管線中是被認為是索引為0的頂點屬性(當沒有著色器綁定時被啟用)。
必須開啟每一個頂點的屬性,否則渲染管線無法獲取這些數(shù)據(jù)。
glBindBuffer(GL_ARRAY_BUFFER, VBO);
這里我們再次綁定我們的buffer準備開始draw call回調(diào)。
在這個小程序中我們每一幀都調(diào)用這個回調(diào)是很冗余的,在更加復雜的程序中,將會有很多的buffer緩沖來存儲不同的模型,則需要Bind要調(diào)用的Buffer來不斷更新管線的狀態(tài)。
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
這個回調(diào)告訴管線怎樣解析bufer中的數(shù)據(jù)。
第1個參定義了屬性的索引,再這個例子中我們知道這個索引默認是0,但是當我們開始使用shader著色器的時候,我們既要明確的設(shè)置著色器中的屬性索引同時也要檢索它;
第2個參數(shù)指的是屬性中的元素個數(shù)(3個表示的是:X,Y,Z坐標);
第3個參數(shù)指的是每個元素的數(shù)據(jù)類型;
第4個參數(shù)指明我們是否想讓我們的屬性在被管線使用之前被單位化,我們這個例子中希望我們的數(shù)據(jù)保持不變的被傳送;
第5個參數(shù)(稱作'stride')指的是緩沖中那個屬性的兩個實例之間的比特數(shù)距離。當只有一個屬性(例如: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),這樣他們將可以通過視窗的變換映射到窗口中可見的坐標上。當俯視Z坐標軸的負方向時這個單位化盒子看上去如下圖:
網(wǎng)站欄目:Opengl_On_Vs_2_頂點緩存對象-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article4/dieiie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、標簽優(yōu)化、電子商務、品牌網(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)
猜你還喜歡下面的內(nèi)容