一、cg的关键字与语义字
关键字:
asm* explicit pixelfragment* template asm_fragment extern pixelshader* texture* auto FALSE private texture1D bool fixed protected texture2D break float* public texture3D case for register textureCUBE catch friend reinterpret_cast textureRECT char get return this class goto row_major throw column_major half sampler TRUE compile if sampler_state try const in sampler1D typedef const_cast inline sampler2D typeid continue inout sampler3D typename decl* int samplerCUBE uniform default interface shared union delete long short unsigned discard matrix* signed using do mutable sizeof vector* double namespace static vertexfragment* dword* new static_cast vertexshader* dynamic_cast operator string* virtual else out struct void emit packed switch volatile enum pass* technique* while
以下关键字可以被用作标志符(建议不要这样做):half2x3 float4
说明:
1、标有星号的话是不区分大小写的。
2、任何以两个的下划线作为前缀(例如,__ newType)的标识符被保留。
3、版权归 NVIDIA公司:http://http.developer.nvidia.com/CgTutorial/cg_tutorial_appendix_d.html
二、语义词
三、cg的函数库
————————————————————————————————————————————————————————————
函数 功能说明
————————————————————————————————————————————————————————————
abs(x) 返回输入参数x的绝对值
————————————————————————————————————————————————————————————
acos(x) 数学中常用到的反余弦arccos(x),值域为[-1, 1],即参数x取值为[-1, 1],得到的角度在[0, PI]区间
————————————————————————————————————————————————————————————
asin(x) 反正弦,值域为[-1, 1],即参数x取值为[-1, 1],得到的角度在[-PI/2 , PI/2]区间
————————————————————————————————————————————————————————————
atan(x) 反正切,值域为无穷,即参数x取值不限,得到的角度在[-PI/2, PI/2]区间
————————————————————————————————————————————————————————————
atan2(y, x) y/x的反正切,这里atan(x) = atan2(y, float(x))
————————————————————————————————————————————————————————————
sin(x) 返回角度x的正弦值,得到值的范围是[-1, 1]
————————————————————————————————————————————————————————————
cos(x) 返回角度x的余弦值,得到值的范围是[-1, 1]
————————————————————————————————————————————————————————————
sinh(x) x的双曲正弦值
————————————————————————————————————————————————————————————
cosh(x) x的双曲余弦值
————————————————————————————————————————————————————————————
all(x) &&运算,输入的参数只要有一个为0,则函数返回false,全为1时才返回true
————————————————————————————————————————————————————————————
any(x) ||运算,输入的参数只要有一个为1,则函数返回true,全为0时才返回false
————————————————————————————————————————————————————————————
ceil(x) 输入的参数向上取整,如 ceil(float(1,1))返回2, ceil(float(1.9))返回2
————————————————————————————————————————————————————————————
floor(x) 输入的参数向下取整
————————————————————————————————————————————————————————————
clamp(x, a, b) 如果x 值小于a,则返回a;如果x 值大于b,返回b;否则,返回x (即x在[a, b],越那边的界就取哪边的值,不越界就返回x)
————————————————————————————————————————————————————————————
saturate(x) 如果x 小于0,返回0;如果x 大于1,返回1;否则,返回x(即x在[0, 1],越那边的界就取哪边的值,不越界就返回x)
————————————————————————————————————————————————————————————
sign(x) 如果x 大于0,返回1;如果x 小于0,返回01;否则返回0
————————————————————————————————————————————————————————————
cross(a, b) 参数a,b必须是三元向量,函数为去计算两个三元向量的叉积
————————————————————————————————————————————————————————————
degrees(x) 输入弧度值,函数返回角度值
————————————————————————————————————————————————————————————
radians(x) 输入角度值,函数返回弧度值
————————————————————————————————————————————————————————————
determinant(x) 计算x矩阵的行列式因子
————————————————————————————————————————————————————————————
dot(a, b) 计算a和b的点积, a和b可以是标量,也可以是矢量
————————————————————————————————————————————————————————————
exp(x) 计算e的x次方值
————————————————————————————————————————————————————————————
exp2(x) 计算2的x次方值
————————————————————————————————————————————————————————————
fmod(x, y) 返回x/y的余数,y不为0
————————————————————————————————————————————————————————————
frac(x) 返回一个标量的小数部分
————————————————————————————————————————————————————————————
frexp(x, out y) 将x分解成尾数和指数表示,x = m * exp2(y),返回m,指数存到y中;如果x为0,则尾数和指数都返回0
————————————————————————————————————————————————————————————
isfinite(x) 判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则(无限数或非数)返回false;
————————————————————————————————————————————————————————————
isinf(x) 判断标量或者向量中的每个数据是否是无限,如果是返回true;否则返回false;
————————————————————————————————————————————————————————————
isnan(x) 判断标量或者向量中的每个数据是否是非数,如果是返回true;否则返回false;
————————————————————————————————————————————————————————————
ldexp(x, n) 返回 x * exp2(n) 的值
————————————————————————————————————————————————————————————
lerp(a, b, f) 计算(1− f )∗ a + b∗ f 或者a + f ∗(b − a)的值。即在下限a 和上限b 之间进行插值,f 表示权值。注意,如果a 和b 是向量,则权值f 必须是标量或者等长的向量。
————————————————————————————————————————————————————————————
lit(NdotL, NdotH, m) N 表示法向量;L 表示入射光向量;H 表示半角向量;m 表示高光系数。函数计算环境光、散射光、镜面光的贡献,返回的4 元向量:
X 位表示环境光的贡献,总是1.0;
Y位代表散射光的贡献,如果N • L < 0,则为0;否则为N • L
Z位代表镜面光的贡献,如果 N • L < 0或者N • H < 0,则位0;否则为(N • H)m;
W 位始终位1.0
————————————————————————————————————————————————————————————
log(x) 计算 ln(x) 的值,x必须大于0
————————————————————————————————————————————————————————————
log2(x) 计算 log2(x) 的值,x 必须大于0
————————————————————————————————————————————————————————————
log10(x) 计算 log10(x) 的值,x 必须大于0
————————————————————————————————————————————————————————————
max(a, b) 比较两个标量或等长向量元素,返回最大值
————————————————————————————————————————————————————————————
min(a,b) 比较两个标量或等长向量元素,返回最小值
————————————————————————————————————————————————————————————
mul(M, N) 计算两个矩阵相乘,如果M 为AxB 阶矩阵,N 为BxC 阶矩阵,则返回AxC 阶矩阵。
下面两个函数为其重载函数
————————————————————————————————————————————————————————————
mul(M, v) 计算矩阵和向量相乘
————————————————————————————————————————————————————————————
mul(v, M) 计算向量和矩阵相乘
————————————————————————————————————————————————————————————
noise(x) 噪声函数,返回值始终在0,1 之间;对于同样的输入,始终返回相同的值(也就是说,并不是真正意义上的随机噪声)
————————————————————————————————————————————————————————————
pow(x, y) 计算 x的y次方
————————————————————————————————————————————————————————————
round(x) 四舍五入
————————————————————————————————————————————————————————————
rsqrt(x) x的反二次方根,x大于0
————————————————————————————————————————————————————————————
sincos(float x, out s, out c) 该函数是同时计算x 的sin 值和cos 值,其中s=sin(x),c=cos(x)。该函数用于“同时需要计算sin 值和cos 值的情况”
————————————————————————————————————————————————————————————
smoothstep(min, max, x) 值x 位于min、max 区间中。如果x=min,返回0;如果x=max,返回1;如果x 在两者之间
按照该公式返回数据:
————————————————————————————————————————————————————————————
step(a, x) 如果x<a,返回0;否则,返回1
————————————————————————————————————————————————————————————
sqrt(x) 求x 的平方根, x大于0
————————————————————————————————————————————————————————————
tan(x) 计算正切值
————————————————————————————————————————————————————————————
tanh(x) 计算双曲正切值
————————————————————————————————————————————————————————————
transpose(M) M为矩阵,计算其转置矩阵
————————————————————————————————————————————————————————————