GLSL函數整理

1  角度和三角函數
         標識爲angle的函數參數假定以弧度爲單位。這些函數不可能出現被0除的情況,如果被除數爲0,結果是未定義的。

  radian函數是將角度轉換爲弧度,degrees函數是將弧度轉換爲角度。sin, cos, tan都是標準的三角函數。asin, acos, atan是反三角函數。genType有點像面向對象中泛型,即如果genType是float型的,那麼

genType pow (genType x, genType y)

就變成了:

float pow (float x, float y)

同理,如果genType是int型的,那麼就變成了:

int pow (int x, int y);

2  指數函數


(1)genType pow (genType x, genType y)

          x的y次方。如果x小於0,結果是未定義的。同樣,如果x=0並且y<=0,結果也是未定義的。使用時應特別注意。

(2)genType exp (genType x)

          e的x次方

(3)genType log (genType x)

          計算滿足x等於e的y次方的y的值。如果x的值小於0,結果是未定義的。

(4)genType exp2 (genType x)

         計算2的x次方

(5)genType log2 (genType x)

         計算滿足x等於2的y次方的y的值。如果x的值小於0,結果是未定義的。

(6)genType sqrt (genType x)

         計算x的開方。如果x小於0,結果是未定義的。

(7)genType inversesqrt (genType x)

         計算x的開方之一的值,如果x小於等於0,結果是未定義的。

3  常用函數

(1)genType abs (genType x)

返回x的絕對值

(2)genType sign (genType x)

如果x>0,返回1.0;如果x=0,返回0,如果x<0,返回-1.0

(3)genType floor (genType x)

返回小於等於x的最大整數值

(4)genType ceil (genType x)

返回大於等於x的最小整數值

(5)genType fract (genType x)

返回x-floor(x),即返回x的小數部分

(6)genType mod (genType x, float y)、genType mod (genType x, genType y)

返回x – y * floor (x/y),即求模計算%

(7)genType min (genType x, genType y),genType min (genType x, float y)

返回x和y的值較小的那個值。

(8)genType max (genType x, genType y),genType max (genType x, float y)

返回x和y的值較大的那個值。

(9)genType clamp (genType x, genType minVal, genType maxVal)、genType clamp (genType x, float minVal, float maxVal)

clamp翻譯爲夾具,就叫夾具函數吧,這個函數是什麼意思呢?看看解釋的意思是:獲取x和minVal之間較大的那個值,然後再拿較大的那個值和最後那個最大的值進行比較然後獲取較小的那個,意思就明白了,clamp實際上是獲得三個參數中大小處在中間的那個值。函數有個說明:如果minVal > minMax的話,函數返回的結果是未定的。也就是說x的值大小沒有限制,但是minval的值必須比maxVal小。

(10)genType mix (genType x, genType y, genType a)、genType mix (genType x, genType y, float a)

返回線性混合的x和y,如:x⋅(1−a)+y⋅a

(11)genType step (genType edge, genType x),genType step (float edge, genType x)

如果x < edge,返回0.0,否則返回1.0

(12)genType smoothstep (genType edge0,genType edge1,genType x),genType smoothstep (float edge0,float edge1,genType x)

如果x <= edge0,返回0.0 ;如果x >= edge1 返回1.0;如果edge0 < x < edge1,則執行0~1之間的平滑埃爾米特差值。如果edge0 >= edge1,結果是未定義的。

4  幾何函數

(1)float length (genType x)

返回向量x的長度

(2)float distance (genType p0, genType p1)

計算向量p0,p1之間的距離

(3)float dot (genType x, genType y)

向量x,y之間的點積

(4)vec3 cross (vec3 x, vec3 y)

向量x,y之間的叉積

(5)genType normalize (genType x)

標準化向量,返回一個方向和x相同但長度爲1的向量

(6)genType faceforward(genType N, genType I, genType Nref)

如果Nref和I的點積小於0,返回N;否則,返回-N;

(7)genType reflect (genType I, genType N)

返回反射向量

(8)genType refract(genType I, genType N,float eta)

返回折射向量

5  矩陣函數


(1)mat matrixCompMult (mat x, mat y)

矩陣x乘以y,result[i][j]是 x[i][j] 和 y[i][j] 的標量積。注意,要獲取線性代數矩陣的乘法,使用乘法操作符*。

6  向量相關函數
       相關或相等的操作符(<, <=, >, >=, ==, !=)被定義(或保留),返回一個標量布爾值。下面, “bvec” 是表示bvec2, bvec3, or bvec4的佔位符, “ivec”是ivec2, ivec3, or ivec4的佔位符,  “vec” 是vec2, vec3, or vec4的佔位符. 在任何情況下,輸入和返回值向量的長度必須匹配。


(1)lessThan

比較x < y.

(2)lessThanEqual

比較x<=y

(3)greaterThan

比較x>y

(4)greaterThanEqual

比較x>=y

(5)equal

比較x==y

(6)notEqual

比較x!=y

(7)bool any(bvec x)

如果向量x的任何組件爲true,則結果返回true。

(8)bool all(bvec x)

            如果向量x的所有組件均爲true,則結果返回true。

(9)bvec not(bvec x)

返回向量x的互補矩陣

7  材質查找函數
       紋理(材質)查找函數對於定點着色器和片元着色器都適用。然而,定點着色器的細節級別並不是通過固定功能計算的,所以頂點着色器和片元着色器紋理查找之間還是有一些差別的。一下函數是通過採樣器訪問紋理,和使用OpenGL ES API是一樣的。紋理屬性如尺寸,像素格式,維數,過濾方法,紋理映射匹配數,深度比較等等在OpenGL ES API中都有定義。

        在下面的函數中,bias參數對於片元着色器來說是可選的。但在定點着色器中不可使用。對於片元着色器,如果使用了bias這個參數,它被加到優先細節的計算級別中來執行紋理訪問操作。如果bias沒有使用,那麼實現將自動選擇一個默認級別。對於非紋理映射的紋理,紋理是直接被使用的。如果是紋理映射的,並且在片元着色器中執行,那麼使用LOD來進行紋理查找。如果是紋理映射的,並且在頂點着色器中執行,那麼使用的是基本紋理。

        以Lod結尾的內建函數只能用在頂點着色器中,在帶有Lod的函數中,lod參數直接用來表示細節級別。
8  片元處理函數
       片元處理函數只有在片元語言中才有,但在GLSL ES中沒有片元處理函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章