修饰符
修饰符 | 解析 |
---|---|
const | 变量被定义成常量的话,在程序中,就不能再对该变量赋值,除非const和uniform,varying一起使用。const修饰的变量,需要在声明时给予一个初始值 |
extern | extern表明声明仅仅是声明,而非定义。在程序中一定有一个地方存在一个非extern的对应的声明 |
in | 只在声明参数,或是使用varying修饰符时使用。将参数,或是varying作为函数或是程序的输入值。函数参数如果没有in,out,或者inout的话,隐式的默认为in |
inline | 只在函数定义时有用,告诉编译器始终对该函数采取内联调用 |
inout | 只在声明为参数和varying时使用,将参数或是varying声明为函数或是程序的输入输出值 |
static | 只在声明全局变量时使用,static将使变量对程序而言成为私有的,外部不可见,不能和uniform,varying一起使用 |
out | 只在声明参数和varying时使用,将变量或varying定义为函数或是程序的输出值 |
uniform | 用于全局变量和程序的入口函数的参数,用来定义constant buffers(常量缓存)。如果用于一个非入口函数的参数,它将被忽略。这样做的目的是为了使一个函数既能作为入口函数,又能作为非入口函数。uniform的变量可以像非uniform的变量那样读写。uniform修饰符通过向外部语言提供一个机制,来提供变量的初始值是如何指定和保存的信息。 |
数学函数
函数名 | 功能描述 |
---|---|
ceil(x) | 对输入参数向上取整。例如: ceil(float(1.3)) ,其返回值为2.0 |
floor(x) | 对输入参数向下取整。例如floor(float(1.3))返回的值为1.0;但是floor(float(-1.3))返回的值为-2.0。该函数与ceil(x)函数相对应。 |
fmod(x,y) | 返回x/y的余数。如果y为0,结果不可预料。 |
frac(x) | 返回标量或矢量的小数 |
frexp(x, out i) | 将浮点数 x 分解为尾数和指数,即 $x = m * 2^i$,返回 m,并将指数存入 i 中;如果 x 为 0,则尾数和指数都返回 0 |
modf(x, out ip) | 把x分解成整数和分数两部分,每部分都和x有着相同的符号,整数部分被保存在ip中,分数部分由函数返回 |
round(x) | 返回四舍五入值。 |
exp(x) | 计算$e_2^x$的值,e=2.71828182845904523536 |
exp2(x) | 计算$2^x$的值 |
log(x) | 计算$ln(x)$的值,x必须大于0 |
log2(x) | 计算$log_2(x)$的值,x必须大于0 |
log10(x) | 计算$lg(x)$的值,x必须大于0 |
max(a, b) | 比较两个标量或等长向量元素,返回最大值 |
min(a,b) | 比较两个标量或等长向量元素,返回最小值。 |
pow(x, y) | 计算$x^y$的值 |
sqrt(x) | 求x的平方根,,x必须大于0 |
rsqrt(x) | x的平方根的倒数,x必须大于0 |
abs(x) | 返回输入参数的绝对值 |
ldexp(x, n) | 计算$x∗2^n$的值 |
mul(M, N) | 矩阵M和矩阵N的积 |
mul(M, v) | 矩阵M和列向量v的积 |
mul(v, M) | 行向量v和矩阵M的积 |
determinant(m) | 计算矩阵的行列式因子。 |
transpose(M) | 矩阵M的转置矩阵如果M是一个AxB矩阵,M的转置是一个BxA矩阵,它的第一列是M的第一行,第二列是M的第二行,第三列是M的第三行,等等 |
asin(x) | 反正弦函数,输入参数取值区间为,返回角度值范围为[−π/2,π/2] |
acos(x) | 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 |
atan(x) | 反正切函数,返回角度值范围为[−π/2,π/2] |
atan2(y,x) | 计算y/x的反正切值。实际上和atan(x)函数功能完全一样只是输入参数不同。atan(x) = atan2(x, float(1))。 |
sin(x) | 输入参数为弧度,计算正弦值,返回值范围 为[-1,1] |
cos(x) | 返回弧度x的余弦值。返回值范围为 |
tan(x) | 计算x正切值 |
sincos(float x, out s, out c) | 该函数是同时计算x的sin值和cos值,其中s=sin(x),c=cos(x)。该函数用于“同时需要计算sin值和cos值的情况”,比分别运算要快很多! |
sinh(x) | 计算x的双曲正弦 |
cosh(x) | 双曲余弦(hyperbolic cosine)函数,计算x的双曲余弦值。 |
tanh(x) | 计算x的双曲线切线 |
radians(x) | 函数将角度值转换为弧度值 |
degrees(x) | 输入参数为弧度值(radians),函数将其转换为角度值(degrees) |
cross(A,B) | 返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量! |
lit(NdotL, NdotH, m) | 函数计算环境光、散射光、镜面光的贡献,返回的4元向量。 N表示法向量; L表示入射光向量; H表示半角向量; m表示高光系数。 X位表示环境光的贡献,总是1.0; Y位代表散射光的贡献,如果 N∙L<0,则为0;否则为N∙L Z位代表镜面光的贡献,如果N∙L<0 或者N∙H<0,则位0;否则为(N∙L)m; W位始终位1.0 |
all(x) | 如果输入参数均不为0,则返回ture; 否则返回flase。&&运算 |
any(x) | 输入参数只要有其中一个不为0,则返回true。 |
isfinite(x) | 判断标量或者向量中的每个数据是否是有限数,如果是返回true;否则返回false; |
isinf(x) | 判断标量或者向量中的每个数据是否是无限,如果是返回true;否则返回false; |
isnan(x) | 判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回true;否则返回false; |
step(a, x) | 如果x<a, 返回0;否则返回1 |
sign(x) | 如果x>0则返回1;如果x=0返回0;如果x<0则返回-1 |
dot(A,B) | 返回A和B的点积(dot product)。参数A和B可以是标量,也可以是向量(输入参数方面,点积和叉积函数有很大不同) |
noise(x) | 根据它的参数类型,这个函数可以是一元、二元或三元噪音函数。返回的值在0和1之间,并且通常与给定的输入值一样 |
clamp(x,a,b) | 如果x值小于a,则返回a; 如果x值大于b,返回b; 否则,返回x。 |
lerp(a, b, f) | 计算或者的值。即在下限a和上限b之间进行插值,f表示权值。注意,如果a和b是向量,则权值f必须是标量或者等长的向量。 |
saturate(x) | 把x限制到[0,1]之间 |
smoothstep(min, max, x) | 值x位于min、max区间中。 如果x=min,返回0;如果x=max,返回1; 如果x在两者之间,按照下列公式返回数据:$-2 * ((x-min)/(max-min))^3 + 3 * ((x-min)*(max-min))^2 $ |