最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ù)組的評論 (共 條)

分享到微博請遵守國家法律
利辛县| 当阳市| 张掖市| 林周县| 东平县| 沅江市| 苍梧县| 紫云| 洛隆县| 夏河县| 新乡县| 三门县| 汉沽区| 孝义市| 绥芬河市| 汶上县| 旅游| 雷州市| 苏尼特右旗| 金华市| 青河县| 佛山市| 陵水| 高唐县| 石家庄市| 南溪县| 手游| 涟水县| 蒙山县| 固始县| 三穗县| 五原县| 龙海市| 东方市| 水富县| 阜康市| 长治市| 阳泉市| 天等县| 东阿县| 淮北市|