OpenGL GLSL 內建變數與 常用內建函式

2021-10-08 03:42:03 字數 2877 閱讀 3261

在著色器中我們一般都會宣告變數來在程式中使用,但是著色器中還有一些特殊的變數,不宣告也可以使用。這些變數叫做內建變數。內建變數,相當於著色器硬體的輸入和輸出點,使用者利用這些輸入點輸入之後,就會看到螢幕上的輸出。通過輸出點可以知道輸出的某些資料內容。當然,實際上肯定不會這樣簡單,這麼說只是為了幫助理解。在頂點著色器中的內建變數和片元著色器的內建變數是不相同的。著色器中的內建變數有很多,在此,我們只列出最常用的集中內建變數。

頂點著色器的內建變數

輸入變數:

gl_position:頂點座標

gl_pointsize:點的大小,沒有賦值則為預設值1,通常設定繪圖為點繪製才有意義。

片元著色器的內建變數

輸入變數:

gl_fragcoord:當前片元相對視窗位置所處的座標。

gl_fragfacing:bool型,表示是否為屬於光柵化生成此片元的對應圖元的正面。

輸出變數:

gl_fragcolor:當前片元顏色

gl_fragdata:vec4型別的陣列。向其寫入的資訊,供渲染管線的後繼過程使用。

常見函式

radians(x

):角度轉弧度

degrees(x

):弧度轉角度

sin(x)

:正弦函式,傳入值為弧度。相同的還有cos余弦函式、tan正切函式、asin反正弦、acos反余弦、atan反正切

pow(x,

y):xyexp(x

):ex

exp2(x

):2x

log(x)

:logex

log2(x

):log2x

sqrt(x

):x√

inversesqr(x

):1x√

abs(x)

:取x的絕對值

sign(x

):x>0返回

1.0,x

<

0返回-

1.0,否則返回

0.0ceil(x

):返回大於或者等於x的整數

floor(x

):返回小於或者等於x的整數

fract(x

):返回x-floor(x

)的值mod(x,

y):取模(求餘)

min(x,

y):獲取xy中小的那個

max(x,

y):獲取xy中大的那個

mix(x,

y,a)

:返回x∗(1

−a)+y∗a

step(x

,a):x

<

a返回0.0

,否則返回

1.0smoothstep(x

,y,a

):a<

x返回0.0

,a>

y返回1.0

,否則返回

0.0-

1.0之間平滑的hermite插值。

dfdx(p

):p在x方向上的偏導數

dfdy(p

):p在y方向上的偏導數

fwidth(p

):p在x和y方向上的偏導數的絕對值之和

幾何函式

length(x

):計算向量x的長度

distance(x

,y):返回向量xy之間的距離

dot(x,

y):返回向量xy的點積

cross(x

,y):返回向量xy的差積

normalize(x

):返回與x向量方向相同,長度為

1的向量

矩陣函式

matrixcompmult(x

,y):將矩陣相乘

lessthan(x

,y):返回向量xy的各個分量執行x

<

y的結果,類似的有greaterthan

,equal

,notequal

lessthanequal(x

,y):返回向量xy的各個分量執行x

<

=y的結果,類似的有類似的有greaterthanequal

any(

bvecx)

:x有乙個元素為

true

,則為true

all(

bvecx)

:x所有元素為

true

,則返回

true

,否則返回

false

not(

bvecx)

:x所有分量執行邏輯非運算

紋理取樣函式有texture2d、texture2dproj、texture2dlod、texture2dprojlod、texturecube、texturecubelod及texture3d、texture3dproj、texture3dlod、texture3dprojlod等。
texture表示紋理取樣,2d表示對2d紋理取樣,3d表示對3d紋理取樣

lod字尾,只適用於頂點著色器取樣

proj表示紋理座標st會除以q

紋理取樣函式中,3d在opengles2.0並不是絕對支援。我們再次暫時不管3d紋理取樣函式。重點只對texture2d函式進行說明。texture2d擁有三個引數,第乙個引數表示紋理取樣器。第二個引數表示紋理座標,可以是二維、三維、或者四維。第三個引數加入後只能在片元著色器中呼叫,且只對取樣器為mipmap型別紋理時有效。

shell 函式與內建變數

傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數 指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中返回每個引數。顯示shell使用的當前選項,與set命令功能相同。顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。顯示傳參的...

shell 函式與內建變數

傳遞到指令碼的引數個數 以乙個單字串顯示所有向指令碼傳遞的引數 指令碼執行的當前程序id號 後台執行的最後乙個程序的id號 與 相同,但是使用時加引號,並在引號中返回每個引數。顯示shell使用的當前選項,與set命令功能相同。顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。顯示傳參的...

mysql內建變數 MySQL常用內建變數

mysql用很多常用的內建變數,掌握這些內建變數後對於我們快速獲取當前mysql的配置有很大幫助,下面就來列舉幾個常用的變數。檢視當前mysql版本號資訊。show variables like version mariadb none show variables like version var...