一文掌握OpenGL的shader内置函数

OpenGL ES有大量的GLSL内置函数,包括:三角函数、指数函数、通用函数、浮点函数、几何函数、矩阵函数、矢量关系函数、纹理函数、原子函数、图像函数、插值函数等。

目录

一、三角函数

1、radians(degrees)

2、degrees(radians)

3、sin(angle)

4、cos(angle)

5、tan(angle)

二、指数函数

1、pow(x, y)

2、exp(x)

3、log(x)

4、sqrt(x)

三、通用函数

1、abs(x)

2、sign(x)

3、floor(x)

4、round(x)

5、ceil(x)

6、mod(x, y)

7、min(x, y)

8、max(x, y)

9、clamp(x, minVal, maxVal)

10、mix(x, y, a)

11、step(edge, x)

12、smoothstemp(edge0, edge1, x)

四、几何函数

1、length(x)

2、distance(p0, p1)

3、dot(x, y)

4、cross(vec3 x, vec3 y)

5、normalize(x)

五、矩阵函数

1、matrixCompMult(mat x, mat y)

2、outerProduct(vec3 a, vec3 b)

3、transpose(mat3 m)

4、inverse(mat3 m)

六、矢量关系函数

1、lessThan(vec x, vec y)

2、greaterThan(vec x, vec y)

3、equal(vec x, vec y)

4、any(bvec x)

5、all(bvec x)

七、整数运算函数

1、bitCount(value)

2、findLSB(value)

3、findMSB(value)

八、纹理函数

1、texture(gsampler2D sampler, vec2 P[,float bias])

2、textureLod(gsampler2D sampler, vec2 P, float lod)

3、textureG rad(gsampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy)

九、原子函数

1、atomicAdd(uint mem, uint data)

2、atomicAnd(uint mem, uint data)

3、atomicOr(uint mem, uint data)

4、atomicCompSwap(int mem, int compare, int data)

十、图像函数

1、imageSize(gimage2D image)

2、imageLoad()

3、imageStore()

十一、插值函数

1、interpolateAtCentroid(vec3 interpolant)

2、interpolateAtSample(vec3 interpolant, int sample)

3、interpolateAtOffset(vec3 interpolant, vec3 offset)


一、三角函数

1、radians(degrees)

把角度转为弧度,转换公式:弧度=(π/180) * degrees

2、degrees(radians)

把弧度转为角度,转换公式:角度(180/π) * radians

3、sin(angle)

正弦函数

4、cos(angle)

余弦函数

5、tan(angle)

正切函数

二、指数函数

1、pow(x, y)

x的y次方,x > 0, y >= 0

2、exp(x)

以e为底的指数函数

3、log(x)

以e为底的对数函数,x > 0

4、sqrt(x)

平方根函数,x >= 0

三、通用函数

1、abs(x)

求绝对值

2、sign(x)

符号函数。x>0时,返回值为1;x<0时,返回值为-1

3、floor(x)

向下取整,返回小于等于x的整数

4、round(x)

近似值取整,返回最接近x的整数,即四舍五入

5、ceil(x)

向上取整,返回大于等于x的整数

6、mod(x, y)

取模函数,返回x - y * (x/y)

7、min(x, y)

求x与y的较小值

8、max(x, y)

求x与y的较大值

9、clamp(x, minVal, maxVal)

求minVal与maxVal之间的数值,即min(max(x, minVal), maxVal)

10、mix(x, y, a)

x与y的混合,即x * (1- a) + y * a

11、step(edge, x)

阶跃函数。当x < edge时返回0,否则返回1

12、smoothstemp(edge0, edge1, x)

平滑阶跃函数。当x <= edge0且x >= edge1时,返回0。否则在[0, 1]区间执行Hermite插值(edge0 < x < edge1)

四、几何函数

1、length(x)

求矢量的长度,sqrt( x0 + x1 + … )

2、distance(p0, p1)

求两点距离,即length(p0 - p1)

3、dot(x, y)

x与y点乘,即x0 · y0 + x1 · y1 + …

4、cross(vec3 x, vec3 y)

求矢量x与y的叉乘,即(x1 · y2 - y1 · x2 , x2 · y0 - y2 · x0 , x0 · y1 - y0 · x1)

5、normalize(x)

归一化操作,即x / length(x)

五、矩阵函数

1、matrixCompMult(mat x, mat y)

矩阵x与y相乘

2、outerProduct(vec3 a, vec3 b)

向量a与b的外积

3、transpose(mat3 m)

矩阵的转置

4、inverse(mat3 m)

矩阵的反转

六、矢量关系函数

1、lessThan(vec x, vec y)

判断矢量x是否小于矢量y,返回bvec矢量

2、greaterThan(vec x, vec y)

判断矢量x是否大于矢量y,返回bvec矢量

3、equal(vec x, vec y)

判断矢量x与矢量y是否相等,返回bvec矢量

4、any(bvec x)

矢量x中任意数值为true,则返回true

5、all(bvec x)

矢量x中所有数值为true,则返回true

七、整数运算函数

1、bitCount(value)

返回二进制value中含有1的个数

2、findLSB(value)

返回二进制value的最低有效位

3、findMSB(value)

返回二进制value的最高有效位

八、纹理函数

1、texture(gsampler2D sampler, vec2 P[,float bias])

使用纹理坐标来查找绑定采样器的纹理

2、textureLod(gsampler2D sampler, vec2 P, float lod)

使用纹理坐标,结合lod(level-of-detail)来查找纹理

3、textureG rad(gsampler2D sampler, vec2 P, vec2 dPdx, vec2 dPdy)

使用纹理坐标,结合梯度来查找纹理

九、原子函数

1、atomicAdd(uint mem, uint data)

原子变量加运算

2、atomicAnd(uint mem, uint data)

原子变量逻辑与运算

3、atomicOr(uint mem, uint data)

原子变量逻辑或运算

4、atomicCompSwap(int mem, int compare, int data)

原子变量的比较交换。mem与compare比较,如果两者相等,那么data赋值给mem

十、图像函数

1、imageSize(gimage2D image)

计算图像的大小

2、imageLoad()

加载图像数据

3、imageStore()

存储图像数据

十一、插值函数

1、interpolateAtCentroid(vec3 interpolant)

在质心的位置进行插值

2、interpolateAtSample(vec3 interpolant, int sample)

在指定采样数的位置进行插值

3、interpolateAtOffset(vec3 interpolant, vec3 offset)

在指定偏移量的位置进行插值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

徐福记456

您的鼓励和肯定是我创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值