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()