一文掌握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)

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

猜你喜欢

转载自blog.csdn.net/u011686167/article/details/127497647