shader 有大量的GLSL内置函数,包括:三角函数、指数函数、通用函数、浮点函数、几何函数、矩阵函数、矢量关系函数、纹理函数、原子函数、图像函数、插值函数等。
一、三角函数
- radians(degrees)
把角度转为弧度,转换公式:弧度=(π/180) * degrees
- degrees(radians)
把弧度转为角度,转换公式:角度(180/π) * radians
- sin(angle)
正弦函数
- cos(angle)
余弦函数
- tan(angle)
正切函数
二、指数函数
- pow(x, y)
x的y次方,x > 0, y >= 0
- exp(x)
以e为底的指数函数
- log(x)
以e为底的对数函数,x > 0
- sqrt(x)
平方根函数,x >= 0
三、通用函数
- abs(x)
求绝对值
- sign(x)
符号函数。x>0时,返回值为1;x<0时,返回值为-1
- floor(x)
向下取整,返回小于等于x的整数
- round(x)
近似值取整,返回最接近x的整数,即四舍五入
- ceil(x)
向上取整,返回大于等于x的整数
- mod(x, y)
取模函数,返回x - y * (x/y)
- min(x, y)
求x与y的较小值
- max(x, y)
求x与y的较大值
- clamp(x, minVal, maxVal)
求minVal与maxVal之间的数值,即min(max(x, minVal), maxVal)
- mix(x, y, a)
x与y的混合,即x * (1- a) + y * a
- step(edge, x)
阶跃函数。当x < edge时返回0,否则返回1
- smoothstemp(edge0, edge1, x)
平滑阶跃函数。当x <= edge0且x >= edge1时,返回0。否则在[0, 1]区间执行Hermite插值(edge0 < x < edge1)
四、几何函数
- length(x)
求矢量的长度,sqrt( x0 + x1 + … )
- distance(p0, p1)
求两点距离,即length(p0 - p1)
- dot(x, y)
x与y点乘,即x0 · y0 + x1 · y1 + …
- cross(vec3 x, vec3 y)
求矢量x与y的叉乘,即(x1 · y2 - y1 · x2 , x2 · y0 - y2 · x0 , x0 · y1 - y0 · x1)
- normalize(x)
归一化操作,即x / length(x)
五、矩阵函数
- matrixCompMult(mat x, mat y)
矩阵x与y相乘
- outerProduct(vec3 a, vec3 b)
向量a与b的外积
- transpose(mat3 m)
矩阵的转置
- inverse(mat3 m)
矩阵的反转
六、矢量关系函数
- lessThan(vec x, vec y)
判断矢量x是否小于矢量y,返回bvec矢量
- greaterThan(vec x, vec y)
判断矢量x是否大于矢量y,返回bvec矢量
- equal(vec x, vec y)
判断矢量x与矢量y是否相等,返回bvec矢量
- any(bvec x)
矢量x中任意数值为true,则返回true
- all(bvec x)
矢量x中所有数值为true,则返回true
七、整数运算函数
- bitCount(value)
返回二进制value中含有1的个数
- findLSB(value)
返回二进制value的最低有效位
- findMSB(value)
返回二进制value的最高有效位
八、纹理函数
- texture(gsampler2D sampler, vec2 P[,float bias])
使用纹理坐标来查找绑定采样器的纹理
- textureLod(gsampler2D sampler, vec2 P, float lod)
使用纹理坐标,结合lod(level-of-detail)来查找纹理
- textureG rad(gsampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy)
使用纹理坐标,结合梯度来查找纹理
九、原子函数
- atomicAdd(uint mem, uint data)
原子变量加运算
- atomicAnd(uint mem, uint data)
原子变量逻辑与运算
- atomicOr(uint mem, uint data)
原子变量逻辑或运算
- atomicCompSwap(int mem, int compare, int data)
原子变量的比较交换。mem与compare比较,如果两者相等,那么data赋值给mem
十、图像函数
- imageSize(gimage2D image)
计算图像的大小
- imageLoad()
加载图像数据
- imageStore()
存储图像数据
十一、插值函数
- interpolateAtCentroid(vec3 interpolant)
在质心的位置进行插值
- interpolateAtSample(vec3 interpolant, int sample)
在指定采样数的位置进行插值
- interpolateAtOffset(vec3 interpolant, vec3 offset)
在指定偏移量的位置进行插值