为了描述方便,对内置函数的参数类型和函数返回类型,特作约定如下表。
| 约定类型 |
覆盖的实际类型 |
| 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) |
| genType atan (genType y, genType x) |
返回y/x的反正切函数值, 函数区间(
−π,π) |
| 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)