
precision mediump float;

uniform float iGlobalTime;
uniform vec2 iResolution;

float map(vec3 p)
{
	return 2.0 - length(p.xy) + (sin(p.x * 3.0) + sin(p.y * 7.0) + sin(p.z * 5.0)) * 0.1;
}

void main( void )
{
	vec2 uv = -1.0 + 2.0 * ( gl_FragCoord.xy / iResolution.xy );
	vec3 dir = normalize(vec3(uv, 1.0));
	vec3 pos = vec3(sin(iGlobalTime),cos(iGlobalTime),iGlobalTime * 5.0);
	float t = 0.0;
	for(int i = 0 ; i < 64; i++)
	{
		float k = map(pos + dir * t);
		if(k < 0.001) break;
		t += k * 0.95;
	}
	gl_FragColor = max((0.741 * vec4(0.05 * t + map( (t * dir + pos) + 0.15) ) * vec4(1,2,3,4).zxyw), 0.0);
}