OpenGL ES 2.0 著色器語言

原文:https://blog.csdn.net/uyy203/article/details/79757333

OpenGL 著色器中使用的是著色語言GLSL盈咳。著色語言源自C語言辕宏,提供了豐富的原生類型腊瑟,如向量、矩陣等菜秦,還有大量的內(nèi)建函數(shù)主慰,這在處理3D圖形時可以更加高效嚣州、易用。下面是整理的是OpenGL ES2.0的GLSL語言河哑。

基本數(shù)據(jù)類型

標(biāo)量
GLSL中的標(biāo)量含布爾避诽、int和float,聲明方法也跟一般的語言相似:

這里寫圖片描述

向量
由2璃谨,3或4維標(biāo)量組成:

這里寫圖片描述

訪問向量的某個分量可以通過數(shù)組下標(biāo)v[0]訪問沙庐,起始索引為0。也可以通過.+分量名來訪問佳吞,根據(jù)目的GLSL中有三套分量名拱雏,分別為顏色r,g,b,a,坐標(biāo)x,y,z,w和紋理坐標(biāo)s,t,p,q底扳,使用的時候三套分量名是相同作用的铸抑,只要同時使用時,保證為同一套即可:


這里寫圖片描述

矩陣
在3D場景中衷模,矩陣是十分重要的鹊汛,平移,旋轉(zhuǎn)或者縮放都是靠矩陣運行實現(xiàn)的阱冶。所以GLSL中原生支持矩陣類型和相應(yīng)的矩陣計算刁憋。

image

矩陣可以看成由多個列向量組成,類似于二維數(shù)組木蹬,通過m[0]訪問第一列向量至耻,通過m[0][0]訪問第一行第一列的值。

采樣器

一種特殊的基本數(shù)據(jù)類型,專門用來進行紋理采樣的相關(guān)操作尘颓,我的理解采樣器就是是一幅或一套紋理的引用走触,其值由宿主程序傳入(Android即為Java):


這里寫圖片描述

結(jié)構(gòu)體

類似于C語言中的結(jié)構(gòu)體,聲明方式同樣使用struct關(guān)鍵字:


image

數(shù)組

跟C語言不太一樣的是疤苹,數(shù)組聲明的時候可以不指定長度互广,使用數(shù)組時也不用關(guān)心越界問題,編譯器會自動創(chuàng)建適當(dāng)大小的數(shù)組:


這里寫圖片描述

空類型

使用void表示痰催,用來聲明不含返回值的函數(shù)兜辞,main函數(shù)就是例子。

基本語法

大部分語法都是跟C語言類似的夸溶,像變量聲明逸吵、初始化,變量的作用域缝裁,運算符扫皱,if/else、for捷绑、while流程控制等都幾乎是一樣的韩脑,主要提一下不一樣的地方。

1粹污、系統(tǒng)許多的內(nèi)建變量都是以_gl為開頭的段多,所以用戶自定義的變量不要使用這個做開頭。

2壮吩、向量进苍、矩陣初始化時各個元素既可以是字面常量也可以是變量:


這里寫圖片描述

3、通過.可以混合選擇向量的分量鸭叙,并且可以重新排列:


這里寫圖片描述

4觉啊、GLSL中對類型的匹配十分嚴格,沒有類型自動轉(zhuǎn)換的功能沈贝,左值右值的類型必須完全相同杠人,類型的強制轉(zhuǎn)換需要通過類似于構(gòu)造函數(shù)的方式:


這里寫圖片描述

5、函數(shù)參數(shù)的修飾符:缺省為in修飾符宋下,修飾輸入?yún)?shù)嗡善,相當(dāng)于在函數(shù)體中使用的是參數(shù)的拷貝,跟一般的函數(shù)參數(shù)一樣学歧;out修飾符罩引,修飾輸出參數(shù),類似于傳入了指針或引用撩满,在函數(shù)體給變量賦值會改變該變量的值,不能是字面常量;inout具有輸入輸出兩種功能伺帘。

6昭躺、指定變量的精度:通過lowp、mediump和highp作為限定符修飾變量就可以指定變量的精度伪嫁。同一個著色器中所有相關(guān)類型都用一個精度可以在著色器第一句使用precision

限定符

要想正確使用GLSL领炫,限定符的意義和所修飾的變量如何使用是很重要的:


這里寫圖片描述

內(nèi)建變量

不需要聲明即可直接使用,分為輸出變量和輸入變量张咳,輸出變量可以在著色器賦值帝洪,進而傳入到渲染管線中,輸入變量為只讀變量脚猾,常用的內(nèi)建變量并不多:


這里寫圖片描述

內(nèi)置函數(shù)

GLSL內(nèi)置了大量內(nèi)置函數(shù)葱峡,通常都是以最優(yōu)方式實現(xiàn),有的甚至直接硬件支持龙助。包含大量數(shù)學(xué)函數(shù):三角函數(shù)砰奕、指數(shù)函數(shù)、幾何函數(shù)提鸟、向量矩陣函數(shù)等军援,這些可以自己開發(fā)編寫,但是往往效率低下称勋,使用內(nèi)置函數(shù)可以更高效更方便的做圖像處理胸哥。還有一些沒有辦法自己編寫的函數(shù),如紋理采樣函數(shù):


這里寫圖片描述

通過采樣器指定到一幅紋理赡鲜,在通過坐標(biāo)獲得某一位置的顏色值空厌,這個函數(shù)在需要進行紋理貼圖時會用到。

基本程序結(jié)構(gòu)

一套program含一個頂點著色器和一個片元著色器蝗蛙,最基礎(chǔ)的不含復(fù)雜圖形計算的著色器其實是很簡單的:

頂點著色器

image

片元著色器

這里寫圖片描述

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蝇庭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子捡硅,更是在濱河造成了極大的恐慌哮内,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壮韭,死亡現(xiàn)場離奇詭異北发,居然都是意外死亡,警方通過查閱死者的電腦和手機喷屋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門琳拨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屯曹,你說我怎么就攤上這事狱庇【罚” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵密任,是天一觀的道長颜启。 經(jīng)常有香客問我,道長浪讳,這世上最難降的妖魔是什么缰盏? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮淹遵,結(jié)果婚禮上口猜,老公的妹妹穿的比我還像新娘。我一直安慰自己透揣,他們只是感情好济炎,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淌实,像睡著了一般冻辩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拆祈,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天恨闪,我揣著相機與錄音,去河邊找鬼放坏。 笑死咙咽,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淤年。 我是一名探鬼主播钧敞,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼麸粮!你這毒婦竟也來了溉苛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤弄诲,失蹤者是張志新(化名)和其女友劉穎愚战,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體齐遵,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡寂玲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了梗摇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拓哟。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伶授,靈堂內(nèi)的尸體忽然破棺而出断序,到底是詐尸還是另有隱情流纹,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布违诗,位于F島的核電站捧颅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏较雕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一挚币、第九天 我趴在偏房一處隱蔽的房頂上張望亮蒋。 院中可真熱鬧,春花似錦妆毕、人聲如沸慎玖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趁怔。三九已至,卻和暖如春薪前,著一層夾襖步出監(jiān)牢的瞬間润努,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工示括, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铺浇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓垛膝,卻偏偏與公主長得像鳍侣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吼拥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容