CG標準函數庫

原文地址:http://blog.csdn.net/lcbcsdn/article/details/46848125


(1)數學函數

函數 功能描述
abs(x) 返回輸入參數的絕對值
acos(x) 反餘切函數,輸入參數範圍爲[-1,1], 返回[0,π]區間的角度值
all(x) 如果輸入參數均不爲0,則返回ture; 否則返回flase。&&運算
any(x) 輸入參數只要有其中一個不爲0,則返回true。
asin(x) 反正弦函數,輸入參數取值區間爲[1,1],返回角度值範圍爲, [π2,π2]
atan(x) 反正切函數,返回角度值範圍爲[π2,π2]
atan2(y,x) 計算y/x的反正切值。實際上和atan(x)函數功能完全一樣,至少輸入參數不同。atan(x) = atan2(x, float(1))。
ceil(x) 對輸入參數向上取整。例如: ceil(float(1.3)) ,其返回值爲2.0
clamp(x,a,b) 如果x值小於a,則返回a
如果x值大於b,返回b
否則,返回x
cos(x) 返回弧度x的餘弦值。返回值範圍爲[1,1]
cosh(x) 雙曲餘弦(hyperbolic cosine)函數,計算x的雙曲餘弦值。
cross(A,B) 返回兩個三元向量的叉積(cross product)。注意,輸入參數必須是三元向量!
degrees(x) 輸入參數爲弧度值(radians),函數將其轉換爲角度值(degrees)
determinant(m) 計算矩陣的行列式因子。
dot(A,B) 返回AB的點積(dot product)。參數AB可以是標量,也可以是向量(輸入參數方面,點積和叉積函數有很大不同)。
exp(x) 計算ex的值,e=2.71828182845904523536
exp2(x) 計算2x的值
floor(x) 對輸入參數向下取整。例如floor(float(1.3))返回的值爲1.0;但是floor(float(-1.3))返回的值爲-2.0。該函數與ceil(x)函數相對應。
fmod(x,y) 返回x/y的餘數。如果y0,結果不可預料。
frac(x) 返回標量或矢量的小數
frexp(x, out i) 將浮點數x分解爲尾數和指數,即x=m2i, 返回m,並將指數存入i中;如果x0,則尾數和指數都返回0
isfinite(x) 判斷標量或者向量中的每個數據是否是有限數,如果是返回true;否則返回false;
isinf(x) 判斷標量或者向量中的每個數據是否是無限,如果是返回true;否則返回false;
isnan(x) 判斷標量或者向量中的每個數據是否是非數據(not-a-number NaN),如果是返回true;否則返回false;
ldexp(x, n) 計算x2n的值
lerp(a, b, f) 計算(1f)a+bf或者a+f(ba)的值。即在下限a和上限b之間進行插值,f表示權值。注意,如果ab是向量,則權值f必須是標量或者等長的向量。
lit(NdotL, NdotH, m) N表示法向量;
L表示入射光向量;
H表示半角向量;
m表示高光係數。 
函數計算環境光、散射光、鏡面光的貢獻,返回的4元向量。 
X位表示環境光的貢獻,總是1.0; 
Y位代表散射光的貢獻,如果 NL<0,則爲0;否則爲NL 
Z位代表鏡面光的貢獻,如果NL<0 或者NH<0,則位0;否則爲(NL)m;
W位始終位1.0
log(x) 計算ln(x)的值,x必須大於0
log2(x) 計算log(x)2的值,x必須大於0
log10(x) 計算log(x)10的值,x必須大於0
max(a, b) 比較兩個標量或等長向量元素,返回最大值。
min(a,b) 比較兩個標量或等長向量元素,返回最小值。
modf(x, out ip) x分解成整數和分數兩部分,每部分都和x有着相同的符號,整數部分被保存在ip中,分數部分由函數返回
mul(M, N) 矩陣M和矩陣N的積,計算方法如下
mul(M,N)=M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44N11N12N12N13N21N22N23N24N31N32N33N34N41N42N43N44
mul(M, v) 矩陣M和列向量v的積,公式如下
mul(M,v)=M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44v1v2v3v4
mul(v, M) 行向量v和矩陣M的積,公式如下
mul(v,M)=[v1v2v3v4]M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44
noise(x) 根據它的參數類型,這個函數可以是一元、二元或三元噪音函數。返回的值在01之間,並且通常與給定的輸入值一樣
pow(x, y) xy
radians(x) 函數將角度值轉換爲弧度值
round(x) 返回四捨五入值。
rsqrt(x) x的平方根的倒數,x必須大於0
saturate(x) x限制到[0,1]之間
sign(x) 如果x>0則返回1;否則返回0
sin(x) 輸入參數爲弧度,計算正弦值,返回值範圍 爲[-1,1]
sincos(float x, out s, out c) 該函數是同時計算x的sin值和cos值,其中s=sin(x)c=cos(x)。該函數用於“同時需要計算sin值和cos值的情況”,比分別運算要快很多!
sinh(x) 計算x的雙曲正弦
smoothstep(min, max, x) x位於minmax區間中。如果x=min,返回0;如果x=max,返回1;如果x在兩者之間,按照下列公式返回數據:
2(xminmaxmin)3+3(xminmaxmin)2
step(a, x) 如果x<a,返回0;否則,返回1
sqrt(x) x的平方根,xx必須大於0
tan(x) 計算x正切值
tanh(x) 計算x的雙曲線切線
transpose(M) 矩陣M的轉置矩陣
如果M是一個AxB矩陣,M的轉置是一個BxA矩陣,它的第一列是M的第一行,第二列是M的第二行,第三列是M的第三行,等等


(2)幾何函數

函數 功能描述
distance(pt1, pt2) 兩點之間的歐幾里德距離(Euclidean distance)
faceforward(N,I,Ng) 如果NgI<0,返回N;否則返回-N
length(v) 返回一個向量的模,即sqrt(dot(v,v))
normalize(v) 返回v向量的單位向量
reflect(I, N) 根據入射光纖方向I和表面法向量N計算反射向量,僅對三元向量有效
refract(I,N,eta) 根據入射光線方向I,表面法向量N和折射相對係數eta,計算折射向量。如果對給定的eta,IN之間的角度太大,返回(0,0,0)。
只對三元向量有效


(3)紋理映射函數

函數 功能描述
tex1D(sampler1D tex, float s) 一維紋理查詢
tex1D(sampler1D tex, float s, float dsdx, float dsdy) 使用導數值(derivatives)查詢一維紋理
Tex1D(sampler1D tex, float2 sz) 一維紋理查詢,並進行深度值比較
Tex1D(sampler1D tex, float2 sz, float dsdx,float dsdy) 使用導數值(derivatives)查詢一維紋理, 並進行深度值比較
Tex1Dproj(sampler1D tex, float2 sq) 一維投影紋理查詢
Tex1Dproj(sampler1D tex, float3 szq) 一維投影紋理查詢,並比較深度值
Tex2D(sampler2D tex, float2 s) 二維紋理查詢
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy) 使用導數值(derivatives)查詢二維紋理
Tex2D(sampler2D tex, float3 sz) 二維紋理查詢,並進行深度值比較
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy) 使用導數值(derivatives)查詢二維紋理,並進行深度值比較
Tex2Dproj(sampler2D tex, float3 sq) 二維投影紋理查詢
Tex2Dproj(sampler2D tex, float4 szq) 二維投影紋理查詢,並進行深度值比較
texRECT(samplerRECT tex, float2 s) 二維非投影矩形紋理查詢(OpenGL獨有)
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) 二維非投影使用導數的矩形紋理查詢(OpenGL獨有)
texRECT (samplerRECT tex, float3 sz) 二維非投影深度比較矩形紋理查詢(OpenGL獨有)
texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) 二維非投影深度比較並使用導數的矩形紋理查詢(OpenGL獨有)
texRECT proj(samplerRECT tex, float3 sq) 二維投影矩形紋理查詢(OpenGL獨有)
texRECT proj(samplerRECT tex, float3 szq) 二維投影矩形紋理深度比較查詢(OpenGL獨有)
Tex3D(sampler3D tex, float s) 三維紋理查詢
Tex3D(sampler3D tex, float3 s, float3 dsdx, float3 dsdy) 結合導數值(derivatives)查詢三維紋理
Tex3Dproj(sampler3D tex, float4 szq) 查詢三維投影紋理,並進行深度值比較
texCUBE(samplerCUBE tex, float3 s) 查詢立方體紋理
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy) 結合導數值(derivatives)查詢立方體紋理
texCUBEproj (samplerCUBE tex, float4 sq) 查詢投影立方體紋理


在這個表中,每個函數第二個參數的名字指明瞭在執行紋理查詢的時候,它的值是如果被使用的:

  • s表示這是一個一元、二元或三元紋理座標。
  • z表示這是一個用來進行陰影貼圖查找的深度比較值。
  • q表示這是一個透視值,在進行紋理查找之前,它被用來除以紋理座標(s)。

當你使用的紋理函數允許你指定一個深度比較值的時候,與之相關聯的紋理單元必須被設置成深度比較紋理。否則,深度比較實際上不會被執行。 

(4)偏導函數

函數 功能描述
ddx(a) 近似a關於屏幕空間x軸的偏導數
ddy(a) 近似a關於屏幕空間y軸的偏導數


(5)調試函數

函數 功能描述
void debug(float4 x) 如果在編譯時設置了DEBUG,片段着 色程序中調用該函數可以將值x作爲COLOR語義的最終輸出;否則該函數什麼也不做。

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