Cg標準函數(shù)庫

函數(shù)功能描述

abs(x) ?返回輸入?yún)?shù)的絕對值

acos(x) ?反余切函數(shù),輸入?yún)?shù)范圍為[-1,1], 返回[0,π]區(qū)間的角度值

all(x) ?如果輸入?yún)?shù)均不為0,則返回ture; 否則返回flase。&&運算

any(x) ?輸入?yún)?shù)只要有其中一個不為0,則返回true。

asin(x) ?反正弦函數(shù),輸入?yún)?shù)取值區(qū)間為[?1,1],返回角度值范圍為,[?π2,π2]

atan(x) ?反正切函數(shù),返回角度值范圍為[?π2,π2]

atan2(y,x) ?計算y/x的反正切值。實際上和atan(x)函數(shù)功能完全一樣,至少輸入?yún)?shù)不同。atan(x) = atan2(x, float(1))。

ceil(x) ? ?對輸入?yún)?shù)向上取整。例如: 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)函數(shù),計算x的雙曲余弦值。

cross(A,B) ?返回兩個三元向量的叉積(cross product)。注意,輸入?yún)?shù)必須是三元向量!

degrees(x) ?輸入?yún)?shù)為弧度值(radians),函數(shù)將其轉(zhuǎn)換為角度值(degrees)

determinant(m) ?計算矩陣的行列式因子。

dot(A,B) ?返回A和B的點積(dot product)。參數(shù)A和B可以是標量,也可以是向量(輸入?yún)?shù)方面,點積和叉積函數(shù)有很大不同)。

exp(x) ?計算ex的值,e=2.71828182845904523536

exp2(x) ?計算2x的值

floor(x) ?對輸入?yún)?shù)向下取整。例如floor(float(1.3))返回的值為1.0;但是floor(float(-1.3))返回的值為-2.0。該函數(shù)與ceil(x)函數(shù)相對應(yīng)。

fmod(x,y) ?返回x/y的余數(shù)。如果y為0,結(jié)果不可預(yù)料。

frac(x) ?返回標量或矢量的小數(shù)

frexp(x, out i) ?將浮點數(shù)x分解為尾數(shù)和指數(shù),即x=m?2i, 返回m,并將指數(shù)存入i中;如果x為0,則尾數(shù)和指數(shù)都返回0

isfinite(x) ?判斷標量或者向量中的每個數(shù)據(jù)是否是有限數(shù),如果是返回true;否則返回false;

isinf(x) ?判斷標量或者向量中的每個數(shù)據(jù)是否是無限,如果是返回true;否則返回false;

isnan(x) ?判斷標量或者向量中的每個數(shù)據(jù)是否是非數(shù)據(jù)(not-a-number NaN),如果是返回true;否則返回false;

ldexp(x, n) ?計算x?2n的值

lerp(a, b, f) ?計算(1?f)?a+b?f或者a+f?(b?a)的值。即在下限a和上限b之間進行插值,f表示權(quán)值。注意,如果a和b是向量,則權(quán)值f必須是標量或者等長的向量。

lit(NdotL, NdotH, m) ?N表示法向量;

L表示入射光向量;

H表示半角向量;

m表示高光系數(shù)。

函數(shù)計算環(huán)境光、散射光、鏡面光的貢獻,返回的4元向量。

X位表示環(huán)境光的貢獻,總是1.0;

Y位代表散射光的貢獻,如果N?L<0,則為0;否則為N?L

Z位代表鏡面光的貢獻,如果N?L<0或者N?H<0,則位0;否則為(N?L)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分解成整數(shù)和分數(shù)兩部分,每部分都和x有著相同的符號,整數(shù)部分被保存在ip中,分數(shù)部分由函數(shù)返回

mul(M, N) ?矩陣M和矩陣N的積,計算方法如下

mul(M,N)=?????M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44??????????N11N12N12N13N21N22N23N24N31N32N33N34N41N42N43N44?????

mul(M, v)矩陣M和列向量v的積,公式如下

mul(M,v)=?????M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44??????????v1v2v3v4?????

mul(v, M)行向量v和矩陣M的積,公式如下

mul(v,M)=[v1v2v3v4]?????M11M12M13M14M21M22M23M24M31M32M33M34M41M42M43M44?????

noise(x)根據(jù)它的參數(shù)類型,這個函數(shù)可以是一元、二元或三元噪音函數(shù)。返回的值在0和1之間,并且通常與給定的輸入值一樣

pow(x, y) ?x的y次方

radians(x)函數(shù)將角度值轉(zhuǎn)換為弧度值

round(x)返回四舍五入值。

rsqrt(x)x的平方根的倒數(shù),x必須大于0

saturate(x)把x限制到[0,1]之間

sign(x)如果x>0則返回1;否則返回0

sin(x)輸入?yún)?shù)為弧度,計算正弦值,返回值范圍 為[-1,1]

sincos(float x, out s, out c)該函數(shù)是同時計算x的sin值和cos值,其中s=sin(x),c=cos(x)。該函數(shù)用于“同時需要計算sin值和cos值的情況”,比分別運算要快很多!

sinh(x)計算x的雙曲正弦

smoothstep(min, max, x)值x位于min、max區(qū)間中。如果x=min,返回0;如果x=max,返回1;如果x在兩者之間,按照下列公式返回數(shù)據(jù):

?2?(x?minmax?min)3+3?(x?minmax?min)2

step(a, x)如果x

sqrt(x)求x的平方根,x√,x必須大于0

tan(x)計算x正切值

tanh(x)計算x的雙曲線切線

transpose(M)矩陣M的轉(zhuǎn)置矩陣

如果M是一個AxB矩陣,M的轉(zhuǎn)置是一個BxA矩陣,它的第一列是M的第一行,第二列是M的第二行,第三列是M的第三行,等等

(2)幾何函數(shù)

函數(shù)功能描述

distance(pt1, pt2)兩點之間的歐幾里德距離(Euclidean distance)

faceforward(N,I,Ng)如果Ng?I<0,返回N;否則返回-N。

length(v)返回一個向量的模,即sqrt(dot(v,v))

normalize(v)返回v向量的單位向量

reflect(I, N)根據(jù)入射光纖方向I和表面法向量N計算反射向量,僅對三元向量有效

refract(I,N,eta)根據(jù)入射光線方向I,表面法向量N和折射相對系數(shù)eta,計算折射向量。如果對給定的eta,I和N之間的角度太大,返回(0,0,0)。

只對三元向量有效

(3)紋理映射函數(shù)

函數(shù)功能描述

tex1D(sampler1D tex, float s)一維紋理查詢

tex1D(sampler1D tex, float s, float dsdx, float dsdy)使用導數(shù)值(derivatives)查詢一維紋理

Tex1D(sampler1D tex, float2 sz)一維紋理查詢,并進行深度值比較

Tex1D(sampler1D tex, float2 sz, float dsdx,float dsdy)使用導數(shù)值(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)使用導數(shù)值(derivatives)查詢二維紋理

Tex2D(sampler2D tex, float3 sz)二維紋理查詢,并進行深度值比較

Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy)使用導數(shù)值(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)二維非投影使用導數(shù)的矩形紋理查詢(OpenGL獨有)

texRECT (samplerRECT tex, float3 sz)二維非投影深度比較矩形紋理查詢(OpenGL獨有)

texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy)二維非投影深度比較并使用導數(shù)的矩形紋理查詢(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)結(jié)合導數(shù)值(derivatives)查詢?nèi)S紋理

Tex3Dproj(sampler3D tex, float4 szq)查詢?nèi)S投影紋理,并進行深度值比較

texCUBE(samplerCUBE tex, float3 s)查詢立方體紋理

texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy)結(jié)合導數(shù)值(derivatives)查詢立方體紋理

texCUBEproj (samplerCUBE tex, float4 sq)查詢投影立方體紋理

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

s表示這是一個一元、二元或三元紋理坐標。

z表示這是一個用來進行陰影貼圖查找的深度比較值。

q表示這是一個透視值,在進行紋理查找之前,它被用來除以紋理坐標(s)。

當你使用的紋理函數(shù)允許你指定一個深度比較值的時候,與之相關(guān)聯(lián)的紋理單元必須被設(shè)置成深度比較紋理。否則,深度比較實際上不會被執(zhí)行。

(4)偏導函數(shù)

函數(shù)功能描述

ddx(a)近似a關(guān)于屏幕空間x軸的偏導數(shù)

ddy(a)近似a關(guān)于屏幕空間y軸的偏導數(shù)

(5)調(diào)試函數(shù)

函數(shù)功能描述

void debug(float4 x)如果在編譯時設(shè)置了DEBUG,片段著 色程序中調(diào)用該函數(shù)可以將值x作為COLOR語義的最終輸出;否則該函數(shù)什么也不做。




float3 viewDir 包含了視角的觀察方向,主要用于計算視差效應(yīng)(Parallax effects ),邊緣光照,等等。

float4 COLOR 包含了經(jīng)過內(nèi)插值(interpolated )的每個頂點的顏色值。

float4 screenPos 包含了用于反射效果的屏幕坐標系的位置信息。例如,在Unity專業(yè)版的WetStreet shader中使用了它。

float3 worldPos 包含了世界坐標系中的位置。

float3 worldRefl 包含了世界坐標系中的反射向量,如果Surface Shader沒有重寫o.Normal。參考Reflect-Diffuse shader。

float3 worldNormal 包含了世界坐標系中的法線向量,如果Surface Shader沒有重寫o.Normal。

float3 worldRefl;

INTERNAL_DATA 包含了世界坐標系的反射向量,如果Surface Shader重寫了o.Normal。為了得到基于逐像素的法線貼圖的反射向量,請使用WorldReflectionVector (IN,o.Normal) 。參考Reflect-Bumped shader。

float3 worldNormal;

INTERNAL_DATA 包含了世界坐標系的發(fā)現(xiàn)向量,如果Surface Shader重寫了o.Normal。為了得到基于逐像素的法線貼圖的法線向量,請使用WorldNormalVector (IN,o.Normal) 。參考Reflect-Bumped shader。

作者:viva158

鏈接:http://www.lxweimin.com/p/ce4998667c37

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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