#define PHOTOSENSITIVE_WARNING 0
#define time iTime

float segment(vec2 P, vec2 A, vec2 B, float r) 
{
    vec2 g = B - A;
    vec2 h = P - A;
	float t = mod(A.y*3.0+A.x*5.0+time*9.0, 1.0);
	float t2 = mod(A.y*3.0+A.x*5.0+time*33.0, 1.0);
    float d = length(h - g * clamp(dot(g, h) / dot(g,g), t,t2));
	
	return 1.0/(1.0+300.0*pow(d,0.9));
	//return smoothstep(r, 0.5*r, d);
}



vec3 rotatey(in vec3 p, float ang) { return vec3(p.x*cos(ang)-p.z*sin(ang),p.y,p.x*sin(ang)+p.z*cos(ang));  }
vec3 rotatex(in vec3 p, float ang) { return vec3(p.x,p.y*cos(ang)-p.z*sin(ang),p.y*sin(ang)+p.z*cos(ang));  }
vec3 rotatez(in vec3 p, float ang) { return vec3(p.x*cos(ang)-p.y*sin(ang),p.x*sin(ang)+p.y*cos(ang),p.z);  }


void mainImage( out vec4 fragColor, in vec2 fragCoord )
{

	vec2 p = 2.0*( fragCoord.xy / iResolution.xy ) -1.0;
	p.x *= iResolution.x/iResolution.y;
	vec3 col = vec3(0);
	
	
	vec3 verts[8];
	vec2 proj[8]; 
	
	verts[0] = vec3(-10,-20,-10);
	verts[1] = vec3(+10,-20,-10);
	verts[2] = vec3(+10,+20,-10);
	verts[3] = vec3(-10,+20,-10);
	verts[4] = vec3(-10,-20,+10);
	verts[5] = vec3(+10,-20,+10);
	verts[6] = vec3(+10,+20,+10);
	verts[7] = vec3(-10,+20,+10);
	
	
	for (int i = 0; i < 8; i++) {
		verts[i] = rotatey(verts[i], 0.3*time);
		verts[i] = rotatex(verts[i], 0.2*time);
		verts[i] = rotatez(verts[i], 0.1*time);
		float dist = -100.0;
		float mag = 4.0;
		proj[i].x = mag*verts[i].x / (verts[i].z + dist);
		proj[i].y = mag*verts[i].y / (verts[i].z + dist);
	}
	
	col += vec3(0.7,0.7,1)*segment(p, proj[0], proj[1], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[1], proj[2], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[2], proj[3], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[3], proj[0], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[4], proj[5], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[5], proj[6], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[6], proj[7], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[7], proj[4], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[0], proj[4], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[1], proj[5], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[2], proj[6], 0.01); 
	col += vec3(0.7,0.7,1)*segment(p, proj[3], proj[7], 0.01); 
	
    col *= 2.2;
#if PHOTOSENSITIVE_WARNING
	col *= 2.2*sin(-p.y*1.0-50.0*time);
#endif
    fragColor = vec4(col, 1.0);
}

