GLSL的常用内置函数

举报
天元浪子 发表于 2021/11/25 15:59:55 2021/11/25
【摘要】 GLSL提供了数以百计的内置函数,门类齐全、功能之强大。本文将内置函数分为等基础函数、三角函数、矩阵函数、向量函数、噪声函数、纹理函数、图像函数、着色器函数和其他函数等九大类别,受限于个人能力,目前只完成了前五个类别,还有纹理函数、图像函数、着色器函数和其他函数等四类,以待后补。

为了描述方便,对内置函数的参数类型和函数返回类型,特作约定如下表。

约定类型 覆盖的实际类型
genType float vec2 vec3 vec4
genFType float vec2 vec3 vec4
genDType double dvec2 dvec3 dvec4
genIType int ivec2 ivec3 ivec4
genUType uint uvec2 uvec3 uvec4
genBType bool bvec2 bvec3 bvec4
vec vec2 vec3 vec4
dvec dvec2 dvec3 vec4
ivec ivec2 ivec3 ivec4
uvec uvec2 uvec3 uvec4
bvec bvec2 bvec3 bvec4
gvec vec ivec uvec
mat 全部单精度浮点型矩阵
dmat 全部双精度浮点型矩阵
gsampler[…] sampler[…] isampler[…] usampler[…]
gimage[…] image[…] iimage[…] uimage[…]

GLSL提供了数以百计的内置函数,门类齐全、功能之强大。本文将内置函数分为等基础函数、三角函数、矩阵函数、向量函数、噪声函数、纹理函数、图像函数、着色器函数和其他函数等九大类别,受限于个人能力,目前只完成了前五个类别,还有纹理函数、图像函数、着色器函数和其他函数等四类,以待后补。

1 基础函数

函数 说明
genType pow (genType x, genType y) 返回x的y次方
genType exp (genType x) 返回e的x次幂
genType exp2 (genType x) 返回2的x次幂
genType log (genType x) 返回x的自然对数(x>0)
genType log2 (genType x) 返回以2为底x的对数(x>0)
genType sqrt (genType x) 返回x的算术平方根
genType inversesqrt (genType x) 返回x的算术平方根的倒数
genFDIType abs (genFDIType x) 返回x的绝对值
genFDIType sign (genFDIType x) 若x>0返回1.0,若x<0返回-1.0,否则返回0
genFDType floor (genFDType x) 向下取整
genFDType ceil (genFDType x) 向上取整
genFDType round(genFDType x) 四舍五入取整
genFDType roundEven(genFDType x) 四舍五入取整(奇入偶舍,3.5和4.5舍入之后都是4.0)
genFDType fract (genFDType x) 返回x-floor(x)
genFDType trunc (genFDType x) 返回的整数与x同号,且绝对值不大于x的绝对值
genFDType mod(genFDType x, (float|double) y) 取模,返回x-y*floor(x/y)
genFDType modf(genFDType x, out genFDType i) 返回x的小数部分,整数部分赋予i
genFDIUType min (genFDIUType x, genFDIUType y) 若y<x返回y,否则返回x
genFDIUType min (genFDIUType x, (int|uint|float|double) y) 若y<x返回y,否则返回x
genFDIUType max (genFDIUType x, genFDIUType y) 若y>x返回y,否则返回x
genFDIUType max (genFDIUType x, (int|uint|float|double) y) 若y>x返回y,否则返回x
genFDType mix(genFDType x, genFDType x, genFDType a, ) 返回线性插值结果,即x+(y-x)a
genFDType mix(genFDType x, genFDType x, (float|double) a, ) 返回线性插值结果,即x+(y-x)a
genBtype isnan(genFDType x) 判断x是否是NaN
genBtype isinf(genFDType x) 判断x是否是无穷大

2 三角函数

函数 说明
genType radians (genType degrees) 度转弧度
genType degrees (genType radians) 弧度转度
genType sin (genType angle) 返回angle正弦函数值
genType cos (genType angle) 返回angle余弦函数值
genType tan (genType angle) 返回angle正切函数值
genType asin (genType x) 返回x的反正弦函数值
genType acos (genType x) 返回x的反余弦弦函数值
genType atan (genType x) 返回x的反正切函数值, 函数区间( π / 2 , π / 2 -\pi/2,\pi/2 )
genType atan (genType y, genType x) 返回y/x的反正切函数值, 函数区间( π , π -\pi,\pi )
genType sinh (genType x) 返回x双曲线正弦函数值
genType cosh (genType x) 返回x双曲线余弦函数值
genType tanh (genType x) 返回x双曲线正切函数值
genType asinh (genType x) 返回x的反双曲线正弦函数值
genType acosh (genType x) 返回x的反双曲线余弦弦函数值
genType atanh (genType x) 返回x的反双曲线正切函数值)

3 矩阵函数

函数 说明
mat matrixCompMult (mat x, mat y) 矩阵对应元素相乘,矩阵相乘则是重载乘法运算符(*)
mat outerProduct(vecM c, vecN r) 列向量c外乘行向量r,返回M行N列的矩阵
mat transpose(mat m) 返回矩阵m的转置矩阵,m保持不变
float determinant(mat m) 返回矩阵m的行列式
mat inverse(mat m) 返回矩阵m的逆矩阵,m保持不变

4 向量函数

函数 说明
(float|double) length(genFDType x) 返回向量的模(L2范式)
(float|double) distance(genFDType p0, genFDType p0) 返回点p0和点p1之间的距离
(float|double) dot(genFDType x, genFDType y) 返回向量x和y的点积
(vec3|dvec3) cross((vec3|dvec3) x, (vec3|dvec3) y) 返回向量x和y的差积
genFDType normallize(genFDType x) 返回向量x的正则化向量(模长为1)
genFDType faceforward(genFDType N, genFDType I, genTypeFD Nref) 如果dot(Nref, I)<0返回N,否则返回-N
genFDType reflect (genFDType I, genFDType N) 返回反射向量,I为入射向量,N为法向量
genFDType refract(genFDType I, genFDType N, (float|double) eta) 返回折射向量,eta为折射率
bvec lessThan(gvec x, gvec y) 逐分量比较,返回x<y
bvec lessThanEqual(gvec x, gvec y) 逐分量比较,返回x<=y
bvec greaterThan(gvec x, gvec y) 逐分量比较,返回x>y
bvec greaterThanEqual(gvec x, gvec y) 逐分量比较,返回x>=y
bvec equal((gvec|bvec) x, (gvec|bvec) y) 逐分量比较,返回x==y
bvec notEqual((gvec|bvec) x, (gvec|bvec) y) 逐分量比较,返回x!=y
bool any(bvec x) 若x的分量存在true返回true,否则返回false
bool all(bvec x) 若x的分量均为true返回true,否则返回false
bool not(bvec x) bool向量取反

5 噪声函数

函数 说明
float noise1(genType x) 返回基于x的一维噪声
float noise2(genType x) 返回基于x的二维噪声
float noise3(genType x) 返回基于x的三维噪声
float noise4(genType x) 返回基于x的四维噪声
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。