新增水波动态特效
- 水波特效产生图片折射扭曲的动效.
原理就是对当前的uv 坐标进行 线性+三解函数等混合变换, 产生一个新的采样坐标,以此来产生像素不在原位的效果.同时又区别于模糊效果那种随机采样的混乱感.
CCProgram fs %{
precision highp float;
#include <alpha-test>
#include <cc-global>
in vec4 v_color;
#if USE_TEXTURE
in vec2 v_uv0;
uniform sampler2D texture;
#endif
uniform Param{
vec2 size;
float time;
};
#define F(x,y) vec2( cos(x-y) * cos(y) , sin(x+y) * sin(y))
vec2 wave(in vec2 p) {
// 返回一个 x,y 与时间相关的平移点坐标.
// 将线性x/y 函数, 结合F(),三角函数,生成一个随机变化的坐标点.
float d = time * 0.2, x=8.*(p.x + d), y=8.*(p.y + d);
return F(x , y);
}
void main () {
vec4 o = vec4(1, 1, 1, 1);
o *= v_color;
ALPHA_TEST(o);
// size 由外部传递进来的sprite节点的实际尺寸.
vec2 q = v_uv0 + 2.0 / size.x * ( wave(v_uv0) - wave( v_uv0 + size ) );
// 用新的点进行采样颜色.
gl_FragColor = o * texture(texture , q);
}
}%
实际效果(静态瞬间):