数学类函数(Mathematical Functions)
abs(x) | 返回标量和向量x的绝对值 如果x是向量,则返回每一个成员的绝对值 |
acos(x) | 返回标量和向量x的反余弦 x的范围是[-1,1],返回值的范围是[0,π], 如果x是向量,则返回每一个成员的反余弦 |
all(x) | 如果一个布尔标量为真,或者布尔向量的所有成员为真,则返回真 |
any(x) | 如果一个布尔标量为真,或者布尔向量成员存在真值,则返回真 |
asin(x) | 返回标量和向量x的反正弦 x的范围是[-1,1],返回值的范围是[-π/2,π/2], 如果x是向量,则返回每一个成员的反正弦 |
atan(x) | 返回标量和向量x的反正切 x的范围不限,返回值的范围是[-π/2,π/2], 如果x是向量,则返回每一个成员的反正切· |
atan2(y, x) | 返回标量和向量y/x的反正切 返回值的范围是[-π,π], |
ceil(x) | 返回不小于x的下一个整数 |
clamp(x, a, b) | 返回一个[a, b]范围内的数 如果x<a则返回a 如果x>b则返回b 否则返回x |
cos(x) | 返回x的cos值 |
cosh(x) | 返回一个x的双曲线cos值 |
cross(a, b) | 返回a, b的叉积 a, b一定含有3个成员 |
degrees(x) | 弧度转化为角度 |
determinant(M) | 返回的正方形矩阵m的行列式 |
dot(a, b) | 返回a与b的点积 |
exp(x) | 返回以e为底的x次幂 |
exp2(x) | 返回以2为底的x次幂 |
floor(x) | 返回不大于x的上一个整数 |
fmod(x, y) | 返回一个x/y的余数, y如果为0,结果不可预料 |
frac(x) | 返回x的小数部分 |
frexp(x, out exp) | 将浮点数x分解为尾数(在[0.5, 1]范围内)和指数(输出为e) 如果x为0,结果的所有部分都为0 |
isfinite(x) | 如果x是有限的则返回true |
isinf(x) | 如果x是无限的则返回true |
isnan(x) | NaN(not-a-number) 如果x NaN(not-a-number) 则返回true |
ldexp(x, n) | x * 2的n次方 |
lerp(a, b, w) | w是比重 当w= 0时返回a,当w= 1时返回b 根据w返回一个[a, b]的值 p.s. w可以为任意值,不用限制在[0, 1]之内 w can be any value (so is not restricted to be between zero and one); |
lit(ndotl, ndoth, m) | 计算环境、漫反射、和高光的光照系数 返回一个4维向量 x,环境光系数,经常值为1.0 y,漫反射系数 如果 dot(n, l) < 0返回0,否则返回dot(n, l) z,高光系数 如果 dot(n, l) < 0或dot(n, h) < 0返回0,否则返回dot(n, h)的m次方 w 固定值为1.0 |
log(x) | ln(x) |
log2(x) | 以2为底x的对数 |
log10(x) | 以10为底x的对数 |
max(a, b) | 返回a,b中的最大值 |
min(a, b) | 返回a,b中的最小值 |
modf(x, out ip) | 把x分离成整数和小数部分,把x的整数值存在输出参数ip处,并返回x的小数部分 |
mul(M, N) | 矩阵M和N的乘积 如果M是一个AxB的矩阵,N是一个BxC的矩阵,就返回一个AxC的矩阵 |
mul(M, v) | 矩阵M和列矢量v的乘积 如果M是一个AxB的矩阵,v是一个Bx1的矢量,就返回一个Ax1的矢量 |
mul(v, M) | 行矢量v和矩阵M的乘积 如果v是一个1xA的矢量,M是一个AxB的矩阵,就返回一个1xB的矢量 |
noise(x) | 任意一个1维2维或3维的噪波函数取决于x的类型。 返回一个[0, 1]范围内的,总是和输入相同的值 |
pow(x, y) | 返回x的y次方值 |
radians(x) | 角度转化为弧度的值 |
round(x) | 采用四舍五入法,返回把x化为整数值 |
rsqrt(x) | 返回x的平方根的倒数 x必须大于0 |
saturate(x) | 返回一个[0, 1]范围内的数 如果x<0则返回0 如果x>1则返回1 否则返回x |
sign(x) | 如果 x>0返回1 如果 x<0返回-1 否则返回0 |
sin(x) | 返回x的sin值 |
sincos(float x, out s, out c) | 输出参数s 为x的sin值,c为s的cos值 这个函数比分别计算x的sin和cos有效率 此函数无返回值 |
sinh(x) | 返回一个x的双曲线sin值 |
smoothstep(min, max, x) | x是一个[min, max]范围内的数 如果x=min返回0,如果x=max返回1 否则返回如下公式的计算结果: |
step(a, x) | 如果 x<a返回0 如果 x≥a返回1 |
sqrt(x) | 返回x的平方根 x必须大于0 |
tan(x) | 返回x的tan值 |
tanh(x) | 返回一个x的双曲线tan值 |
transpose(M) | 返回M的转置矩阵 |
cg函数的内部代码实施
看了他们的函数内部实现代码,感觉他们写的都很巧妙,可以用“微量高效”来形容,值得我们学习
abs(x)
如果x是float值,则内部是这么实施的
操作消耗的非常小,等同于无
acos(x)
如果x是float值,则内部是这么实施的
all(x)
如果x是float值,则内部是这么实施的
any(x)
如果x是float值,则内部是这么实施的
asin(x)
如果x是float值,则内部是这么实施的
atan(x)
如果x是float值,则内部是这么实施的
atan2(y, x)
ceil(x)
如果x是float值,则内部是这么实施的
clamp(x)
如果x是float值,则内部是这么实施的
cos(x)
如果x是float值,则内部是这么实施的
cosh(x)
如果x是float值,则内部是这么实施的
cross(x)
如果x是float值,则内部是这么实施的
degrees(x)
如果x是float值,则内部是这么实施的
determinant (x)
degrees(x)
如果x是float4值,则内部是这么实施的
exp(x)
exp2(x)
floor(x)
fmod(x)
frac(x)
frexp(x)
isfinite(x)
isinf(x)
isnan(x)
lerp(a, b, f)
lit(ndotl, ndoth, m)
max(a, b)
min(a, b)
modf(x, out ip)
pow(x, y)
radians(x)
round(x)
rsqrt(x)
saturate(x)
sign(x)
step(a, x)
sqrt(x)
transpose(M)