(格式未完成)
最近用到了一些WebGl中的一些计算方法, 顺便码一下GLSL相关的所有内置函数, 自从有了gpu计算, 妈妈再也不会担心web前端计算又卡又慢拉!
1. 角度和三角函数:
此类函数中, 如果参数为矢量, 就是对矢量的每个分量进行运算
- radians(degree): 将角度值转化为弧度值
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- degrees(radian): 将弧度值转化为角度值
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- sin(angle): 正弦三角函数, 参数使用弧度
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- cos(angle): 余弦三角函数, 参数使用弧度
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- tan(angle): 正切三角函数, 参数使用弧度
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- asin(x): 反正弦三角函数, 返回值为弧度, 在[-π/2, π/2]
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- acos(x): 反余弦三角函数, 返回值为弧度, 在[-π/2, π/2]区间
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- atan(y, x): 反正切三角函数, 返回值为弧度, 正切值为y/x, x和y的符号决定处于哪个象限中, 返回值在[-π, π]区间.
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
- atan(x): 反正切三角函数, 返回值为弧度, 在[-π, π]区间
参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
2. 指数对数函数:
此类函数中, 如果参数为矢量, 就是对矢量的每个分量进行运算.
pow(x, y): 返回x的y次幂.如果x < 0, 返回未定义值;如果x = 0而y < 0, 返回未定义值参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.exp(x): 返回x的自然指数幂参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.log(x): 返回x的自然对数, 如果x < 0, 返回未定义值参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.exp2(x): 返回2的x幂参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.log2(x): 返回以2为底的x的对数, 如果x <= 0, 返回未定义值参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.sqrt(x): 返回x的平方根, 如果x < 0, 返回未定义值参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.inversesqrt(x): 返回x的平方根的倒数, 如果x < 0, 返回未定义值参数可以为
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
3. 通用函数:
此类函数中, 如果参数为矢量, 就是对矢量的每个分量进行运算.
abs(x): 返回x的无符号绝对值
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
sign(x): 返回x的符号, 即如果x>0返回1.0, 如果x = 0返回0.0, 否则返回-1.0
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
floor(x): 返回小于等于x且最接近x的整数
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
ceil(x): 返回大于等于x且最接近x的整数
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
fract(x): 返回x的小数部分, 即返回x-floor(x)
参数可以使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数数据类型相一致.
mod(x, y): 返回x除以y的余数, 即(x-y*floor(x/y))
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, y 的数据类型可以为 float .
min(x, y): 返回x和y的最小值, 即y < x则返回y, 否则返回x
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, y 的数据类型可以为 float .
max(x, y): 返回x和y的最大值, 即x < y则返回y, 否则返回x
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, y 的数据类型可以为 float .
clamp(x, minVal, maxVal): 将x限制在min和max之间, 即min(max(x, minVal), maxVal)
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, minVal 和 maxVal 的数据类型可以都为 float .
10. mix(x, y, a): 返回 x 和 y 的线性混合, 即x*(1-a)+y*a
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, y的数据类型或a的数据类型可以有一种为 float .
11. step(edge, x): 根据两个数值生成阶梯函数, 即如果x < edge则返回0.0, 否则返回1.0
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与x的数据类型相一致.
当x的数据类型为 vec2 、 vec3 、 vec4 时, edge的数据类型可以为 float .
12. smoothstep(edge0, edge1, x): 经过Hermite插值的阶梯函数.如果x <= edge0则返回0.0, 如果x >= edge1则返回1, 否则按如下方法插值出一个值
t= clamp((x-edge0)/(edge1-edge0), 0, 1);
return tt(3-2*t);
参数可以都使用
float、vec2、vec3、vec4类型数据, 函数返回值与参数的数据类型相一致.
4. 几何函数:
length(x): 返回矢量x的长度
参数可以使用float、vec2、vec3、vec4类型数据, 函数返回值为float类型.distance(p0, p1): 返回p0和p1之间的距离, 即length(p0-p1)
参数可以使用float、vec2、vec3、vec4类型数据, 函数返回值为float.dot(x, y): 返回x和y的点积, 对vec3: x[0]*y[0]+x[1]*y[1]+x[2]*y[2] 参数可以使用float、vec2、vec3、vec4类型数据, 函数返回值为float` .cross(x, y): 返回x和y的叉积
参数和返回值都为vec3数据类型.normalize(x): 对x进行归一化, 保持矢量方向不变但长度为1, 即x/length(x)
参数可以使用float、vec2、vec3、vec4类型数据, 函数返回值与参数的数据类型相一致.faceforward(N, I, Nref): 法向矢量反方向, 根据入射矢量I和参考矢量Nref来调整法向矢量.如果dot(Nref, I) <0则返回N, 否则返回-N
参数可以都使用float、vec2、vec3、vec4类型数据, 函数返回值与参数的数据类型相一致.reflect(I, N): 计算反射矢量, 入射矢量I, 表面法向矢量N, 返回I-2*dot(N, I)*N, 其中的N必须已归一化
参数可以都使用float、vec2、vec3、vec4类型数据, 函数返回值与参数的数据类型相一致.refract(I, N, eta): 根据入射光和介质特性计算折射现象.入射光方向为I, 表面方向矢量为N, 介质的折射率为eta, 返回被折射后的光线方向: k= 1.0-eta*eta*(1.0-dot(N, I)*dot(N, I)) if(k <0.0) 返回0.0或由0.0组成的对应矢量 入射光矢量I和表面法向矢量N必须已经归一化 参数I和N可以都使用float、vec2、vec3、vec4类型数据, 函数返回值与这两个参数的数据类型相一致, eta则为float` .
5. 矩阵函数:
matrixCompMult(x, y)``: 将矩阵x和矩阵y相乘, 即 result[i][j]= x[i][j]*y[i][j]`
参数可以都使用f vec2 、 vec3 、 vec4 类型数据, 函数返回值与参数的数据类型相一致.
6. 矢量函数:
此类函数中, 如果参数为矢量, 就是对矢量的每个分量进行运算.
lessThan(x, y): 逐分量比较x <y是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.lessThanEqual(x, y): 逐分量比较x <= y是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.greaterThan(x, y): 逐分量比较x>y是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.greaterThanEqual(x, y): 逐分量比较x>= y是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.equal(x, y): 逐分量比较= = 是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.notEqual(x, y): 逐分量比较!= 是否成立
参数可以都使用vec2、vec3、vec4、ivec2、ivec3、ivec4类型数据, 函数返回值为与参数矢量长度相同的bvec矢量, 即bvec2、bvec3或bvec4.not(x): 矢量逐分量的逻辑反运算
参数可以使用bvec2、bvec3、bvec4类型数据, 函数返回值与参数的数据类型一致.any(x): 矢量的任一分量为true则返回true
参数可以使用bvec2、bvec3、bvec4类型数据, 函数返回值为bool数据类型.all(x): 矢量的所有分量为true则返回true
参数可以使用bvec2、bvec3、bvec4类型数据, 函数返回值为bool数据类型.
7. 纹理查询函数:
vec4texture2D(sampler2D sampler,vec2coord): 使用纹理坐标coord, 从当前绑定到sampler的二维纹理中读取相应的纹理像素.vec4texture2D(sampler2D sampler,vec2coord,floatbias): 使用纹理坐标coord和偏移bias, 从当前绑定到sampler的二维纹理中读取相应的纹理像素, bias只能在片元着色器中使用表示使用Mip纹理时加在当前lod上的值.vec4texture2DProj(sampler2D sampler,vec3coord): 使用纹理坐标coord, 从当前绑定到sampler的投影纹理中读取相应的纹理像素.vec4texture2DProj(sampler2D sampler,vec3coord,floatbias): 使用纹理坐标coord和偏移bias, 从当前绑定到sampler的投影纹理中读取相应的纹理像素, bias只能在片元着色器中使用表示使用Mip纹理时加在当前lod上的值.vec4texture2DProj(sampler2D sampler,vec4coord): 使用纹理坐标coord, 从当前绑定到sampler的投影纹理中读取相应的纹理像素, coord的最后1个分量被忽略.vec4texture2DProj(sampler2D sampler,vec4coord,floatbias): 使用纹理坐标coord和偏移bias, 从当前绑定到sampler的投影纹理中读取相应的纹理像素, coord的最后1个分量被忽略, bias只能在片元着色器中使用表示使用Mip纹理时加在当前lod上的值.vec4texture2DLod(sampler2D sampler,vec2coord,floatload): 使用纹理坐标coord和lod, 从当前绑定到sampler的二维纹理中读取相应的纹理像素, lod为使用Mip纹理时的序号.vec4texture2DProjLod(sampler2D sampler,vec3coord,floatlod): 使用纹理坐标coord和lod, 从当前绑定到sampler的投影纹理中读取相应的纹理像素, lod为使用Mip纹理时的序号.vec4texture2DProjLod(sampler2D sampler,vec4coord,floatlod): 使用纹理坐标coord和lod, 从当前绑定到sampler的投影纹理中读取相应的纹理像素, coord的最后1个分量被忽略, lod为使用Mip纹理时的序号.vec4textureCube(samplerCube sampler,vec3coord): 使用纹理坐标coord, 从当前绑定到sampler的立方体纹理中读取相应的纹理像素.coord的方向可用来指定立方体纹理的表面.vec4textureCube(samplerCube sampler,vec3coord,floatbias): 使用纹理坐标coord和偏移bias, 从当前绑定到sampler的立方体纹理中读取相应的纹理像素.coord的方向可用来指定立方体纹理的表面, bias只能在片元着色器中使用表示使用Mip纹理时加在当前lod上的值.vec4textureCubeLod(samplerCube sampler,vec3coord,floatlod): 使用纹理坐标coord和lod, 从当前绑定到sampler的立方体纹理中读取相应的纹理像素.coord的方向可用来指定立方体纹理的表面, lod表示使用Mip纹理的序号.