什么是GLSL
GLSL(OpenGL Shading Language)OpenGL著色器語(yǔ)言。
- GLSL基礎(chǔ)類型變量:
| 類型 | 描述 |
|---|---|
| bool | 布爾類型 |
| int | 32位整數(shù) |
| float | 32位浮點(diǎn)數(shù) |
-
GLSL聚合類型變量:
2.1 向量: 既有大小,又有方向的量稱為向量。(vec(2-4))
向量在著色器中的作用:位置、顏色、紋理2.1.1 標(biāo)量:只有大小,沒有方向的量稱為標(biāo)量。(實(shí)際上標(biāo)量就是實(shí)數(shù))
2.1.2 齊次坐標(biāo):簡(jiǎn)而言之,齊次坐標(biāo)就是用N+1維來代表N維坐標(biāo)。
我們可以在一個(gè)2D笛卡爾坐標(biāo)末尾加上一個(gè)額外的變量w來形成2D齊次坐標(biāo),因此,一個(gè)點(diǎn)(X,Y)在齊次坐標(biāo)里面變成了(x,y,w),并且有
X = x/w
Y = y/w
摘自關(guān)于齊次坐標(biāo)的理解(經(jīng)典)2.1.3 分量訪問符
分量訪問符 描述 xyzw 坐標(biāo)訪問符 rgba 顏色訪問符 stpq 紋理訪問符 2.2 矩陣:mat(2-4) GLSL中首先填充列,然后填充行。
矩陣在3D開發(fā)中的作用:位移、旋轉(zhuǎn)、縮放
m=mat3(4.0)4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0 -
GLSL結(jié)構(gòu)體和采樣器:
3.1 結(jié)構(gòu)體:同C語(yǔ)言中結(jié)構(gòu)體。
3.2 數(shù)組:同C語(yǔ)言中數(shù)組。
3.3采樣器:進(jìn)行紋理采樣的。
一個(gè)采樣器代表一套或者一副紋理。
| 采樣器類型 | 說明 |
|---|---|
| sampler2D | 用來訪問2D紋理的 |
| sampler3D | 用來訪問3D紋理的 |
| samplerCube | 立體貼圖的紋理 |
注意:① 采樣器的變量不能在著色器中初始化,從宿主語(yǔ)言(Android中是Java)接收傳遞進(jìn)來的。
② 一般情況下采樣器的變量都是用uniform限定符修飾。
③ sampler3D并不是再所有的OpenGLES中支持的,(如果要使用,在著色器代碼中打開相應(yīng)的拓展)
- 類型修飾符:(待修改、補(bǔ)充)
| 修飾符 | 作用 |
|---|---|
| attribute | 屬性修飾符 ①一般用于頂點(diǎn)變量,例如:頂點(diǎn),顏色,紋理... ②只用于頂點(diǎn)著色器 ③只能用來修飾浮點(diǎn)數(shù)的標(biāo)量,向量,以及矩陣變量 |
| uniform | 一致變量修飾符(什么是一致變量:一致變量是指,對(duì)同一組頂點(diǎn)組成的單個(gè)3D物體中所有頂點(diǎn)都相同的量) ①可以用在頂點(diǎn)、片段著色器中 ②可以修飾所有的數(shù)據(jù)類型 |
| varing | varying變量是vertex和fragment shader之間做數(shù)據(jù)傳遞用的。 ①varying變量在vertex和fragment shader二者之間的聲明必須是一致的。 ②application不能使用此變量。 |
| const | 修飾的變量不可變(編譯時(shí)常量) |
| in | 設(shè)置這個(gè)變量為著色器的輸入變量 |
| out | 設(shè)置這個(gè)變量為著色器的輸出變量 |
| inout | 用來修飾的參數(shù)為輸入輸出參數(shù),具有輸入輸出兩種功能 |
操作符:同C語(yǔ)言。
控制流:同C語(yǔ)言。
循環(huán)語(yǔ)句:同C語(yǔ)言。
流程控制語(yǔ)句:
break
continue
return
disscard:丟棄當(dāng)前片元,終止片元著色器執(zhí)行。函數(shù)聲明:
格式:返回值 函數(shù)名(參數(shù)列表)
注意:①?zèng)]有修飾符。②函數(shù)名不能數(shù)字,連續(xù)下劃線,gl_開頭。-
內(nèi)建變量:
10.1 輸入內(nèi)建變量:輸入變量負(fù)責(zé)將渲染管線中固定部分產(chǎn)生的信息傳遞進(jìn)著色器。
10.2 輸出內(nèi)建變量:輸出變量負(fù)責(zé)將著色器產(chǎn)生的信息傳遞給渲染管線中固定功能。gl_Position:頂點(diǎn)著色器中,類型vec4
gl_PointSize:頂點(diǎn)著色器中,float類型,默認(rèn)為1。
gl_FragColor:vec4類型,由片元著色器寫入計(jì)算完成的片元顏色值,此顏色值將送入渲染管線的后繼階段經(jīng)行處理。
gl_FragCoord:片元著色器中,vec4類型向量,中含有當(dāng)前片元對(duì)于窗口位置的坐標(biāo)值(x、y、z、w)。
gl_FrontFacing:片元著色器中,讀取這個(gè)內(nèi)建變量的值可以判斷正在處理的片元是否屬于在光柵化階段生成此片元的對(duì)應(yīng)圖元的正面。 -
OpenGL渲染管線
OpenGL渲染管線處理數(shù)據(jù)流程.png
