无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

uniform變量和頂點數(shù)組

2023-08-22 23:22 作者:西村啪啪二  | 我要投稿

uniform讓我們可以從CPU向GPU中的著色器發(fā)送數(shù)據(jù),它與頂點屬性都能發(fā)送數(shù)據(jù),不同之處在于,第一,uniform是全局的,意味著uniform變量必須在每個著色器程序對象中都是獨一無二的,而且它可以被著色器程序的任意著色器在任意階段訪問。第二,無論你把uniform值設置成什么,uniform會一直保存它們的數(shù)據(jù),直到它們被重置或更新。

我們先在著色器文件中的片段著色器中添加uniform變量u_Color

在C++文件中為其賦值,我們通過glGetUniformLocation找到u_Color的索引,如果找不到就會返回-1,但這并不意味著我們一定犯了錯誤,比如變量名稱拼寫錯誤之類的,因為如果我們在著色器中聲明了uniform變量,但在整個著色器中沒有使用這個uniform變量,那么OpenGL在編譯著色器時就會靜默移除這個變量,這也會導致返回-1。找到索引后,最后通過glUniform4f來設置u_Color的值,這里需要注意,在設置一個uniform變量之前必須先調用glUseProgram,因為glUniform4f是在當前激活的著色器程序中設置uniform的。

這里我們舉個例子來感受一下uniform變量存在的好處,我們將glUniform4f放到while中,來每一幀都對顏色進行設置,將第二個參數(shù)設置為隨時間變化的值,這樣就能得到一個顏色不斷變化的正方形。

設置glfwSwapInterval可以讓顏色變換更加平滑一些

glfwSwapInterval

設置當前OpenGL上下文的交換間隔,即在交換緩沖區(qū)并返回之前,從調用glfwSwapBuffers開始等待的屏幕更新次數(shù)。這有時被稱為垂直同步、垂直回掃同步或簡稱為vsync。

調用線程上的上下文必須是當前的。在沒有當前上下文的情況下調用此函數(shù)將導致GLFW_NO_CURRENT_CONTEXT錯誤。

目前為此我們討論了頂點緩沖區(qū),索引緩沖區(qū),著色器,這里還有一個頂點數(shù)組的概念,頂點數(shù)組和頂點緩沖區(qū)聽起來有些相似,它并不是DirectX等其他渲染接口中有的東西,頂點數(shù)組是在OpenGL特殊存在的東西,它通過一種特定的規(guī)范綁定頂點緩沖區(qū),用于頂點緩沖區(qū)的布局。

回顧一下,頂點緩沖區(qū)只包含了一些頂點位置,

我們創(chuàng)建緩沖區(qū),綁定緩沖區(qū),設置了數(shù)據(jù)

然后激活頂點屬性,指定實際數(shù)據(jù)的布局

這是頂點緩沖區(qū)的設置流程,在每次繪制之前我們都需要做這些操作,而頂點數(shù)組對象(Vertex Array Object,?VAO)可以幫我們簡化某些部分。

  • 綁定著色器->綁定頂點緩沖區(qū)->設置頂點布局->綁定索引緩沖區(qū)->DrawCall指令

  • 綁定著色器->綁定頂點數(shù)組->綁定索引緩沖區(qū)->DrawCall指令

頂點數(shù)組對象可以像頂點緩沖對象那樣綁定,任何隨后的頂點屬性調用都會儲存在這個VAO中,比如glVertexAttribPointer、與頂點屬性關聯(lián)的頂點緩沖對象、glEnableVertexAttribArray和glDisableVertexAttribArray。這樣的好處就是,當配置頂點屬性指針時,我們只需要將那些設置執(zhí)行一次,之后再繪制物體的時候只需要綁定相應的VAO就行了,而不用每次繪制之前都做一系列操作,這使得在不同頂點數(shù)據(jù)和屬性配置之間切換變得非常簡單,只需要綁定不同的VAO就行了


uniform變量和頂點數(shù)組的評論 (共 條)

分享到微博請遵守國家法律
古蔺县| 牡丹江市| 天峻县| 马公市| 深水埗区| 东光县| 息烽县| 三亚市| 西乌| 南雄市| 寿宁县| 乌拉特前旗| 项城市| 繁昌县| 东光县| 都昌县| 临江市| 乐都县| 樟树市| 红桥区| 封开县| 平定县| 镇原县| 淮南市| 乐安县| 武山县| 威海市| 玛多县| 佳木斯市| 临桂县| 临西县| 内江市| 焉耆| 承德市| 娄底市| 南投市| 昌图县| 咸宁市| 永登县| 吉隆县| 宜兰市|