precision highp float;
uniform vec2 resolution;
uniform vec2 mouse;
uniform float time;
out vec4 o;
vec2 mirror(vec2 uv, vec2 n, float d){
float s = dot(n, uv) + d;
return uv + n * (abs(s) - s);
}
vec2 p6m(vec2 uv){
float cos6 = 0.866033; // cos(3.1415/6.)
vec2 stp = vec2(1.5/cos6, 1.);
uv = abs(fract(uv / stp * .5) * 2. - 1.) * stp;
vec2 n3 = vec2(-cos6, -.5);
vec2 n2 = -vec2(.5, -cos6);
vec2 n1 = -vec2(cos6, -.5);
uv = mirror(uv, n3, 1.);
uv = mirror(uv, n2, 0.);
uv = mirror(uv, n1, 0.);
return uv;
}
void main(){
vec2 uv = (gl_FragCoord.xy * 2. - resolution) /
min(resolution.x, resolution.y) * 3.;
uv = p6m(uv);
vec3 a=vec3(0,.85,.5),b=vec3(.9,0,.6),c=vec3(.95,.85,0);
o.rgb+=mix(mix(a,b,uv.x),c,uv.y*1.4);
}
vec2 mirror(vec2 uv, vec2 n, float d){
float s = dot(n, uv) + d;
return uv + n * (abs(s) - s);
}
vec2 p6m(vec2 uv){
float cos6 = 0.866033;
vec2 stp = vec2(1.5/cos6, 1.);
uv = abs(fract(uv / stp * .5) * 2. - 1.) * stp;
vec2 n3 = vec2(-cos6, -.5);
vec2 n2 = -vec2(.5, -cos6);
vec2 n1 = -vec2(cos6, -.5);
uv = mirror(uv, n3, 1.);
uv = mirror(uv, n2, 0.);
uv = mirror(uv, n1, 0.);
return uv;
}