xxxxxxxxxx
84
precision mediump float;
uniform vec2 u_resolution;
uniform float u_time;
uniform sampler2D u_texture;
uniform vec3 u_background;
vec2 rotate(vec2 _st, float _angle) {
float s = sin(_angle);
float c = cos(_angle);
return (_st - 0.5) * mat2(c, -s, s, c) + 0.5;
}
vec2 scale(vec2 _st, float _scale, float _half) {
return (_st - _half) * _scale + _half;
}
vec4 blend(vec4 _color1, vec4 _color2) {
return _color1 * _color1.a + _color2 * (1. - _color1.a);
}
vec4 clamp_tex(vec2 _pos, vec4 _tex) {
_tex.a *= step(_pos.x, 1.0)
* step(_pos.y, 1.0)
* step(0., _pos.x)
* step(0., _pos.y);
return _tex;
}
void main() {
vec2 st = gl_FragCoord.xy / u_resolution;
float ratio = u_resolution.x / u_resolution.y;
st.x *= ratio;
vec2 grid = st * 3.;
vec2 floor = floor(grid);
float a = mod(floor.x, 2.) * 2. - 1.;
float b = mod(floor.y, 2.) * 2. - 1.;
// grid.x += u_time * 0.2;
vec2 grid_1 = grid;
vec2 grid_2 = grid;
grid_1.y += 0.5 * u_time;
grid_1.x += 0.1 * u_time;
grid_2.y += 0.5 * -u_time;
grid_2.x += 0.5 * -u_time;
grid_1 = scale(grid_1, 1.4, 0.5);
grid_2 = scale(grid_2, 1.4, 0.5);
vec2 f1 = fract(grid_1);
vec2 f2 = fract(grid_2);
f1 = scale(f1, 1.3, 0.5);
f1 = rotate(f1, u_time * 0.8);
f2 = scale(f2, 1.3, 0.5);
f2 = rotate(f2, -u_time);
vec4 tex1 = texture2D(u_texture, f1);
vec4 tex2 = texture2D(u_texture, f2);
tex1 = clamp_tex(f1, tex1);
tex2 = clamp_tex(f2, tex2);
vec4 final_tex = blend(tex1, tex2);
// vec4 color = blend(final_tex, vec4(u_background, 1.));
vec4 color = final_tex;
// vec4 color = vec4(uv.x, uv.y, 1.0, 1.0);
if (color.a <= 0.)
discard;
gl_FragColor = color;
}