uniform vec2 resolution; uniform float time; uniform vec4 mouse; uniform sampler2D tex0; uniform sampler2D tex1; uniform sampler2D tex2; uniform sampler2D tex3; vec4 fpar00[6]; vec4 fpar01[6]; float cylinder( in vec4 sph, in vec3 ro, in vec3 rd ) { vec3 d = ro - sph.xyz; float a = dot( rd.xz, rd.xz ); float b = dot( rd.xz, d.xz ); float c = dot( d.xz, d.xz ) - sph.w*sph.w; float t; t = b*b - a*c; if( t>0.0 ) { t = -(b+sqrt( t ))/a; } return t-.001; } float esfera( in vec4 sph, in vec3 ro, in vec3 rd ) { vec3 d = ro - sph.xyz; float b = dot( rd, d ); float c = dot( d, d ) - sph.w*sph.w; float t = b*b - c; if( t>0.0 ) { t = -b - sqrt( t ); } return t-.001; } bool esfera2( in vec4 sph, in vec3 ro, in vec3 rd, in float tmin ) { vec3 d = ro - sph.xyz; float b = dot( rd, d ); float c = dot( d, d ) - sph.w*sph.w; float t = b*b - c; bool r = false; if( t>0.0 ) { t = -b - sqrt( t ); r = (t>0.0) && (t0.0 ) { t = -(b+sqrt(t)); r = (t>0.0) && (t<(tmin*a)); } return r; } float plane( in vec4 pla, in vec3 ro, in vec3 rd ) { float de = dot(pla.xyz, rd); de = sign(de)*max( abs(de), 0.001); float t = -(dot(pla.xyz, ro) + pla.w)/de; return t-.001; } vec3 calcnor( in vec4 obj, in vec4 col, in vec3 inter, out vec2 uv ) { vec3 nor; if( col.w>2.5 ) { nor.xz = inter.xz - obj.xz; nor.y = 0.0; nor = nor/obj.w; //uv = vec2( atan(nor.x,nor.z)/3.14159, inter.y ); uv = vec2( nor.x, inter.y ); } else if( col.w>1.5 ) { nor = obj.xyz; uv = inter.xz*.2; } else { nor = inter - obj.xyz; nor = nor/obj.w; uv = nor.xy; } return nor; } vec4 cmov( in vec4 a, in vec4 b, in bool cond ) { return cond?b:a; } float cmov( in float a, in float b, in bool cond ) { return cond?b:a; } int cmov( in int a, in int b, in bool cond ) { return cond?b:a; } float intersect( in vec3 ro, in vec3 rd, out vec4 obj, out vec4 col ) { float tmin = 10000.0; float t; col.w = -1.0; bool isok; t = esfera( fpar00[0], ro, rd ); isok = (t>0.0) && (t0.0) && (t0.0 && t0.0 && t0.0 && t0.0 && t