learn GLSL from zero
ToolsCrea con shadersShader MakerCrea shaders gratis en líneaToolkitObras de shaders listas para tu webSketcher LabPinta el hero de tu landing con shaders3D StudioEl editor Three.js en tu navegador
GamesJuega con shadersOnomatoShaderEscribe una palabra y explótalaThe WatcherUn ojo que te sigueAetherVidrio líquido con un ojo adentroBloomcoreUna palabra hace crecer un jardín de luzPyrokineAvienta fuego a la paredVoltaicLa pirámide lanza rayosSurfSurfea un océano de shader

Lección 2 de 10 · Fractales en GLSL

z = z² + c

Una sola regla, repetida. La semilla de todo.

Toda la familia Mandelbrot nace de una línea: z = z² + c. Elevar al cuadrado un número complejo no es x²; es (x²-y², 2xy), una rotación más un estiramiento. Eso es la línea rara de adentro del bucle.

Aquí c es el frag y arrancamos z = c, iterando solo IT=5 veces. Todavía no decidimos quién escapa; pintamos el campo crudo, qué tan grande se puso z tras pocos pasos. Ya se asoma la silueta.

z = vec2(z.x*z.x - z.y*z.y, 2.0*z.x*z.y) + cLa multiplicación compleja: parte real x²-y², parte imaginaria 2xy. Sumarle c reinyecta la posición del frag en cada vuelta. Repetir esto es todo el fractal.
PruebaCambia const int IT=5 a 2 y ves el campo casi sin formar; el bucle necesita un número fijo en WebGL. Sube zoom a 2.2 para abrir el encuadre.

El código

precision highp float;
void main(){
  vec2 uv=(gl_FragCoord.xy*2.0 - R)/R.y;
  float zoom=1.6;
  vec2 c=uv*zoom+vec2(-0.5,0.0);
  vec2 z=c;
  const int IT=5;
  for(int i=0;i<IT;i++){
    z=vec2(z.x*z.x-z.y*z.y, 2.0*z.x*z.y)+c;
  }
  float m=length(z);
  float tone=log(1.0+m);
  vec3 col=0.5+0.5*cos(vec3(0.0,2.3,4.6)+tone*3.0);
  col*=smoothstep(40.0,0.0,m)*0.8+0.12;
  gl_FragColor=vec4(col,1.0);
}
close