为了描述方便,对内置函数的参数类型和函数返回类型,特作约定如下表。
约定类型 |
覆盖的实际类型 |
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)