Repaso + usando mouse y audio input
Script: Blobs
float sdEsfera(vec3 p, vec3 offset, float radio){
return length(p-offset)-radio;
}
float sdfCanvas(vec3 p){
float td = length(p-vec3(100.))-0.01;
for(int i=0; i < 10; ++i){
for(int j=0; j<10; ++j){
vec4 s = texture2D(channel0, vec2(float(i)/10.,float(j)/10.));
float x = mix(-1.,1.,float(i)/10.);
float y = mix(-1.,1.,float(j)/10.);
if (s.r>0.){
float d = sdEsfera(p,vec3(x,y,0.),0.15);
td = smin(d,td,0.2);
}
}
}
return td;
}
float map(vec3 p){
float s1 = sdEsfera(p, vec3(1.,0.,0.),.8);
//return s1; // 1. Retornamos 1 esfera
float s2 = sdEsfera(p, vec3(-1.,0.,0.),.8);
//return smin(s1,s2,1.); // 2. Retornamos 2 esferas "pegadas"
return sdfCanvas(p); // 3. Hacemos el mismo proceso pero
// sobre las cosas dibujadas en el canvas
}
void main () {
vec2 pos = uv(); vec3 color;
vec3 rd = normalize(vec3(pos, mix(0.5,2., 1.)));
vec3 ro = vec3(0.,0.,-5.);
float marcha;
float n;
for (int i=0; i<64; i++)
{
vec3 p =ro+marcha*rd;
float d = map(p);
if (d < 0.001 || marcha > 50.) {
break;
}
marcha +=d;
n += 0.1/(1.4+abs(d));
}
color +=n*0.2;
gl_FragColor = vec4(color, 1.0);
}NOTAS
Inputs de The_Force:
Last updated