Files
Live-Coding-Sources/2018-03-07/02-eybor.frag
Jonathan Giroux e1e649ac3e Add 2018-03-07
2018-04-22 13:40:49 +02:00

59 lines
894 B
GLSL

precision mediump float;
uniform float time;
uniform vec2 resolution;
float scene(vec3 p)
{
return p.y;
}
vec3 rm(vec3 o, vec3 r)
{
vec3 p = o;
for(int i = 0; i < 512; ++i)
{
float d = scene(p);
}
return p;
}
float rand(vec2 uv)
{
return fract(sin(dot(vec2(12.9898, 78.233), uv))*43758.5453);
}
vec3 sc(vec3 p, vec2 uv)
{
vec3 co = vec3(0., 0.07, .14);
co += smoothstep(.99, 1., rand(uv));
float md = length(uv-vec2(-.8, .4));
co = mix(co, vec3(1.), 1.-smoothstep(.12, .125, md));
co += .5*exp(-4.*md)*vec3(1.2, 1.1, .8);
co += .2*exp(-2.*md);
return co;
}
void main () {
vec2 uv = -1.+2.*gl_FragCoord.xy / resolution.xy;
uv.x *= gl_FragCoord.x/gl_FragCoord.y;
vec3 rd = normalize(vec3(uv, -1.));
vec3 o = vec3(0., 0., 0.);
vec3 p = rm(o, rd);
vec3 rp = o-(100.-o.y)/(rd/rd.y);
vec3 co = sc(rp, uv);
gl_FragColor = vec4(co, 1);
}