Cocos Creator Shader常用方法与拓展实现

一、 内置方法

vec4 texture2D(sampler2D sampler, vec2 coord)
使用纹理坐标 coord,从当前绑定到 sampler 的二维纹理中读取相应的纹素。

radians(x)
将角度转化为弧度值,即 PI*x/180。

degrees(x)
将弧度值转化为角度,即 180*x/PI。

sin(x)
三角正弦函数,返回值区间为 [-1,1]。

cos(x)
三角余弦函数,返回值区间为 [-1,1]。

pow(x, n)
返回 x 的 n 次幂。

abs(x)
返回 x 的无符号绝对值。

sign(x)
如果 x>0 返回1.0,如果 x=0 返回0.0,否则返回 -1.0。

ceil(x)
对 x 向上取整。

floor(x)
对 x 向下取整。

mod(x, n)
取模,即 x 除以 n 的余数。

min(x1, x2)
返回 x1 和 x2 的较小值。

max(x1, x2)
返回 x1 和 x2 的较大值。

fract(x)
返回 x 的小数部分。

clamp(x, minVal, maxVal)
把 x 的值限制在 minVal 和 maxVal 之间,即返回 min(max(x,minVal),maxVal)。

mix(x, y, a)
返回 x 和 y 的线性混合,即 x*(1-a)+y*a

step(edge, x)
插值,根据两个数值生成阶梯函数,即 x<edge 则返回 0.0,否则返回 1.0。

smoothstep(edge0, edge1, x)
插值,经过Hermite插值的阶梯函数。如果 x<=edge0 则返回 0.0,如果 x>=edge1 则返回 1.0,否则按照如下方法插值并返回

// genType is float/vec2/vec3/vec4
genType t;
t = clamp((x-edge0)/(edge1-edge0), 0, 1);
return t*t*(3-2*t);
length(x)
返回矢量x的长度

distance(p0, p1)
返回 p0 和 p1 之间的距离,即 length(p0-p1)

dot(x, y)
返回 x 和 y 的点积,对于 vec2 就是 x[0]*y[0]+x[1]*y[1]

cross(x, y)
返回 x 和 y 的叉积,对于 vec3 就是

result[0] = x[1]*y[2] - y[1]*x[2]
result[1] = x[2]*y[0] - y[2]*x[0]
result[2] = x[0]*y[1] - y[0]*x[1]
normalize(x)
对 x 进行归一化,保持矢量方向不变但长度为 1,即 x/length(x)

二、 拓展方法

/**
  * 拓展方法
  */

float lerp(float a, float b, float w) {
  return a * (1. - w) + b * w;
}

vec2 lerp2(vec2 a, vec2 b, float w) {
  return a * (1. - w) + b * w;
}

vec3 lerp3(vec3 a, vec3 b, float w) {
  return a * (1. - w) + b * w;
}

vec4 lerp4(vec4 a, vec4 b, float w) {
  return a * (1. - w) + b * w;
}

持续更新

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值