GLSL一些内置函数

目录

角度和三角函数

  • radians()

    • 将角度转换为弧度。

      示例:float rad = radians(90.0); 返回值rad为1.5708,表示将90度转换为弧度。

  • degrees()

    • 将弧度转换为角度。

      示例:float deg = degrees(1.5708); 返回值deg为90.0,表示将1.5708弧度转换为角度。

  • sin()

    • 计算角度的正弦值。

      示例:float result = sin(0.7854); 返回值result约为0.7071,表示计算0.7854弧度的正弦值。

  • cos()

    • 计算角度的余弦值。

      示例:float result = cos(0.7854); 返回值result约为0.7071,表示计算0.7854弧度的余弦值。

  • tan()

    • 计算角度的正切值。

      示例:float result = tan(0.7854); 返回值result约为0.9992,表示计算0.7854弧度的正切值。

  • asin()

    • 计算给定值的反正弦值。

      示例:float result = asin(0.5); 返回值result约为0.5236,表示计算值0.5的反正弦值。

  • acos()

    • 计算给定值的反余弦值。

      示例:float result = acos(0.5); 返回值result约为1.0472,表示计算值0.5的反余弦值。

  • atan()

    • 计算给定值的反正切值。

      示例:float result = atan(1.0); 返回值result约为0.7854,表示计算值1.0的反正切值。

指数函数

  • pow()
    • 计算x的y次方。例如,pow(2.0, 3.0)返回8.0,表示计算2的3次方。
    • 可以用于实现颜色的gamma校正,调整颜色的亮度曲线等。
  • exp()
    • 计算e的x次方,其中e是自然对数的底数。例如,exp(1.0)返回2.71828,表示计算e的1次方。
    • 可以用于实现粒子系统中的衰减效果,例如粒子的大小随时间呈指数增长或衰减。
  • log()
    • 计算x的自然对数。例如,log(10.0)返回2.30259,表示计算10的自然对数。
    • 可以用于计算深度缓冲的指数变换,将深度值从线性空间转换为非线性空间。
  • exp2()
    • 计算2的x次方。例如,exp2(4.0)返回16.0,表示计算2的4次方。
    • 可以用于实现纹理级别的计算,根据距离或细节等级选择合适的纹理细节级别。
  • log2()
    • 计算x的以2为底的对数。例如,log2(16.0)返回4.0,表示计算以2为底的16的对数。
    • 可以用于计算纹理级别的反向操作,根据纹理的实际大小确定适合的纹理细节级别。
  • sqrt()
    • 计算x的平方根。例如,sqrt(9.0)返回3.0,表示计算9的平方根。
    • 可以用于实现距离计算,例如在光照模型中计算点光源到片元的距离衰减。
  • inversesqrt()
    • 计算x的倒数的平方根。例如,inversesqrt(4.0)返回0.5,表示计算4的倒数的平方根。
    • 可以用于实现归一化向量的长度计算,例如在光照模型中计算光照强度随距离衰减的效果。

常用函数

abs() //返回参数的绝对值。

sign() //如果 x 小于 0.0,则返回 -1.0;如果 x 等于 0.0,则返回 0.0;如果 x 大于 0.0,则返回 +1.0。

floor() //找到小于或等于参数的最近整数。返回等于小于或等于的最接近整数的值x

ceil() //查找大于或等于参数的最近整数。返回等于大于或等于的最接近整数的值x

fract() //计算参数的小数部分。返回 的小数部分x。这被计算为x - floor(x)

mod() //计算一个参数对另一个取模的值。返回模的值y。这被计算为x - y * floor(x/y)

min()

max()

clamp()

mix()

step()

smoothstep()

几何函数

  • length()

    • 计算向量的长度(模)。

      示例:float len = length(vec3(3.0, 4.0, 0.0)); 返回值len为5.0,表示计算向量(3.0, 4.0, 0.0)的长度。

  • distance()

    • 计算两个点之间的距离。

      示例:float dist = distance(vec3(1.0, 2.0, 3.0), vec3(4.0, 5.0, 6.0)); 返回值dist为5.19615,表示计算点(1.0, 2.0, 3.0)与点(4.0, 5.0, 6.0)之间的距离。

  • dot()

    • 计算两个向量的点积(内积)。

      示例:float result = dot(vec3(1.0, 2.0, 3.0), vec3(4.0, 5.0, 6.0)); 返回值result为32.0,表示计算向量(1.0, 2.0, 3.0)和向量(4.0, 5.0, 6.0)的点积。

  • cross()

    • 计算两个向量的叉积(外积)。

      示例:vec3 result = cross(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); 返回值result为(0.0, 0.0, 1.0),表示计算向量(1.0, 0.0, 0.0)和向量(0.0, 1.0, 0.0)的叉积。

  • normalize()

    • 将向量归一化(单位化),使其长度为1。

      示例:vec3 normalizedVec = normalize(vec3(3.0, 0.0, 4.0)); 返回值normalizedVec为(0.6, 0.0, 0.8),表示将向量(3.0, 0.0, 4.0)归一化。

  • faceforward()

    • 返回一个朝向与法线方向相同的向量。

      示例:vec3 newVec = faceforward(normal, incident, normalRef); 返回值newVec是根据法线normal、入射向量incident和参考法线normalRef计算出的新向量。

  • reflect()

    • 计算入射向量相对于法线的反射向量。

      示例:vec3 reflectedVec = reflect(incidentVec, normalVec); 返回值reflectedVec是根据入射向量incidentVec和法线normalVec计算出的反射向量。

  • refract()

    • 计算入射向量相对于法线的折射向量。

      示例:vec3 refractedVec = refract(incidentVec, normalVec, 1.5); 返回值refractedVec是根据入射向量incidentVec、法线normalVec和折射率1.5计算出的折射向量。

矩阵函数

matrixCompMult()

向量关系函数

  • lessThan()
  • lessThanEqual()
  • greaterThan()
  • greaterThanEqual()
  • equal()
  • notEqual()
  • any()
  • all()
  • not()

纹理查找函数

  • texture2D()
  • textureCube()