Lección 8 de 10 · Patrones en shaders
Radial
La estrella que irradia. Lóbulos de fuego.
En Going polar usaste sin(ang) para hacer rebanadas. Ahora lo usas para deformar un círculo. Si el radio del círculo cambia según el ángulo, el círculo se convierte en forma.
El círculo deformado por su propio ángulo.
El truco: tomas length(p) como distancia al centro, y la comparas con un radio que oscila con el ángulo: 0.5 + 0.2 * sin(ang * N). Donde N es el número de lóbulos.
sin(ang * N)El ángulo recorre una vuelta completa. Si multiplicas por 5, el seno oscila 5 veces en esa vuelta, 5 picos, 5 valles, 5 lóbulos. Cambia N y cambia la forma.
Cambia el
5. a 3., 3 brazos. A 8., 8 lóbulos. Prueba sumarle + T al ángulo para que gire. Pista: sin(ang * 5. + T)El código
void main(){
vec2 p = (2.*gl_FragCoord.xy - R) / min(R.x, R.y);
float ang = atan(p.y, p.x);
float dist = length(p);
float r = 0.5 + 0.25 * sin(ang * 5.);
float d = dist - r;
float shape = smoothstep(.02, -.02, d);
float r2 = 0.2 + 0.1 * sin(ang * 5. + 3.14);
float inner = smoothstep(.02, -.02, dist - r2);
float shadow = smoothstep(0.,.3, length(p+vec2(.05,-.07))-r);
float glow = exp(-max(d,0.)*3.) * .5;
float core = exp(-dist*3.) * .6;
vec3 col = vec3(.04,.03,.08) * shadow;
col += vec3(.95,.4,.7) * shape;
col += vec3(.4,.1,.6) * inner;
col += vec3(.9,.3,.5) * glow;
col += vec3(.95,.8,.9) * core;
gl_FragColor = vec4(col, 1.);
}