/rumbo/orbits/ f(z) = z*z+c bonus: f(z) = z*z+c f(z) = z*z+c: bonus bonus: f(z) = IFS
xxxxxxxxxx
1
// Author: Sol Sarratea
2
// Title: Computando las órbitas para f(z) = pow(z) + c
3
4
precision mediump float;
5
6
uniform float u_time;
7
uniform vec2 u_resolution;
8
uniform vec2 u_mouse;
9
uniform sampler2D u_buffer0;
10
uniform sampler2D u_buffer1;
11
uniform sampler2D u_buffer2;
12
vec2 uv(){
13
    /* Devuelve las posiciones del canvas en rango [-1.,1.]x[-1.,1.] */
14
    vec2 pos = gl_FragCoord.xy/u_resolution;
15
    pos = pos *2.-1.;
16
    return pos;
17
}
18
19
#define PI 3.1415926535897932384626433
20
21
22
vec2 multC(vec2 a, vec2 b){
23
    float re = a.x*b.x - a.y*b.y;
24
    float im = a.x*b.y + a.y*b.x;
25
    return vec2(re,im);
26
}
27
28
vec2 f(vec2 zn, vec2 c){
29
    return multC(zn,zn)+vec2(c);
30
}
31
32
33
void main() {
34
    vec3 color = vec3(0.);
35
    vec2 pos = uv();    
36
    vec2 posN = gl_FragCoord.xy/u_resolution;
37
    vec2 c = vec2(-0.210,-0.780);
38
    //Sugerencia: agregar funcion que dependa de u_time para explorar el espacio de parametros dinamicamente
39
    //c = vec2(-0.700,mix(-0.210,0.210,fract(u_time*0.2)));
40
41
42
    // Leo la última posición actualizada
43
    vec2 z = texture2D(u_buffer2,posN).xy;
44
#ifdef BUFFER_0
45
    //BUFFER 0: Mezcla el frame anterior con el valor calculado
46
    vec3 prev = texture2D(u_buffer1, posN).xyz;
47
    
48
    float cir = smoothstep(0.02,0.,length(pos-z)-0.01);
49
    cir -= smoothstep(0.02,0.1,length(pos-z));
50
    color = max(prev,cir);
51
    
52
    if (color.r>0.1){
53
        color -=0.001;
54
    }
55
    
56
57
#elif defined( BUFFER_1 )
58
    //BUFFER 1: Almacena el ultimo frame
59
    color = texture2D(u_buffer0, posN+vec2(0.0,0.)).rgb;
60
    
61
#elif defined( BUFFER_2 )
62
    //BUFFER 2: Calcula la k-esima iteracion de f(z)
63
  
64
    vec2 nuevo_z = f(z,c);
65
    color.rg = nuevo_z;
66
    
67
    
68
#else
69
    //Finalmente,rendereamos a la escena principal
70
    color = texture2D(u_buffer1, posN).rgb;
71
    
72
#endif
73
74
    gl_FragColor = vec4(color, 1.0);
75
76
77
}
78
79