xxxxxxxxxx
// Author: Sol Sarratea// Title: Conjunto de Mandelbrot
precision mediump float;
uniform float u_time;
uniform vec2 u_resolution;
uniform vec2 u_mouse;
// Multilicacion de vectores :
// sean a,b vectores de 2 componentes se los puede pensar como numeros complejos. Luego:
// a = ax + ay i, donde `ax` es la parte real y `ay` la parte imaginaria
// b = bx + by i, donde `bx` es la parte real y `by` la parte imaginaria
// La multiplicacion queda definida como :
// a * b = (ax * bx - ay * bx) + ( ax * by + ay * bx ) i
vec2 multC(vec2 a, vec2 b){
float re = a.x*b.x - a.y*b.y;
float im = a.x*b.y + a.y*b.x;
return vec2(re,im);
}
vec2 uv(){
/* Devuelve las posiciones del canvas en rango [-1.,1.]x[-1.,1.] */
vec2 pos = gl_FragCoord.xy/u_resolution;
pos = pos *2.-1.;
return pos;
}
void main() {
vec3 color;
vec2 pos = uv() *1. - vec2(0.5,0.);
// Descomentar las lineas 25 y 26
// para explorar la frontera
// pos.x -= 14600. + u_mouse.x*0.1;
// pos *= .0001;
float dist = 0.;
const int max_pasos =100;
// zn inicia en 0 para todas las pocisiones
vec2 zn = vec2(0);
// En el ciclo se actualiza zn por zn ^ 2 + pos ;
for (int i = 0; i < max_pasos; i++) {
zn = multC(zn,zn) + pos;
float magnitud = length(zn);
if ( magnitud > 400.) break;
dist += 2.056/float(max_pasos);
}
// Coloreamos con un gradiente negro-blanco que tan cerca estoy del conjunto
color += dist;
gl_FragColor = vec4(color,1.);
}