Skip to content

Commit 33fa76d

Browse files
committed
Add more fractals and decompose slightly
1 parent 719c81d commit 33fa76d

5 files changed

Lines changed: 116 additions & 31 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
vec2 complex_mult(vec2 z, vec2 w){
2+
return vec2(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x);
3+
}
4+
5+
vec2 complex_div(vec2 z, vec2 w){
6+
return complex_mult(z, vec2(w.x, -w.y)) / (w.x * w.x + w.y * w.y);
7+
}
8+
9+
vec2 complex_pow(vec2 z, int n){
10+
vec2 result = vec2(1.0, 0.0);
11+
for(int i = 0; i < n; i++){
12+
result = complex_mult(result, z);
13+
}
14+
return result;
15+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#version 330
2+
3+
uniform vec3 light_source_position;
4+
uniform float gloss;
5+
uniform float shadow;
6+
uniform float focal_distance;
7+
8+
uniform vec2 parameter;
9+
uniform float opacity;
10+
uniform float n_steps;
11+
uniform float mandelbrot;
12+
13+
uniform vec3 color0;
14+
uniform vec3 color1;
15+
uniform vec3 color2;
16+
uniform vec3 color3;
17+
uniform vec3 color4;
18+
uniform vec3 color5;
19+
uniform vec3 color6;
20+
uniform vec3 color7;
21+
uniform vec3 color8;
22+
23+
uniform vec2 frame_shape;
24+
25+
in vec3 xyz_coords;
26+
27+
out vec4 frag_color;
28+
29+
#INSERT finalize_color.glsl
30+
#INSERT complex_functions.glsl
31+
32+
const int MAX_DEGREE = 5;
33+
34+
void main() {
35+
vec3 color_map[9] = vec3[9](
36+
color0, color1, color2, color3,
37+
color4, color5, color6, color7, color8
38+
);
39+
vec3 color;
40+
41+
vec2 z;
42+
vec2 c;
43+
44+
if(bool(mandelbrot)){
45+
c = xyz_coords.xy;
46+
z = vec2(0.0, 0.0);
47+
}else{
48+
c = parameter;
49+
z = xyz_coords.xy;
50+
}
51+
52+
float outer_bound = 2.0;
53+
bool stable = true;
54+
for(int n = 0; n < int(n_steps); n++){
55+
z = complex_mult(z, z) + c;
56+
if(length(z) > outer_bound){
57+
float float_n = float(n);
58+
float_n += log(outer_bound) / log(length(z));
59+
float_n += 0.5 * length(c);
60+
color = float_to_color(sqrt(float_n), 1.5, 8.0, color_map);
61+
stable = false;
62+
break;
63+
}
64+
}
65+
if(stable){
66+
color = vec3(0.0, 0.0, 0.0);
67+
}
68+
69+
frag_color = finalize_color(
70+
vec4(color, opacity),
71+
xyz_coords,
72+
vec3(0.0, 0.0, 1.0),
73+
light_source_position,
74+
gloss,
75+
shadow
76+
);
77+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#version 330
2+
3+
#INSERT camera_uniform_declarations.glsl
4+
5+
in vec3 point;
6+
out vec3 xyz_coords;
7+
8+
uniform float scale_factor;
9+
uniform vec3 offset;
10+
11+
#INSERT position_point_into_frame.glsl
12+
#INSERT get_gl_Position.glsl
13+
14+
void main(){
15+
xyz_coords = (point - offset) / scale_factor;
16+
gl_Position = get_gl_Position(position_point_into_frame(point));
17+
}

manimlib/shaders/meta_poly_fractal/frag.glsl

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,25 +31,10 @@ in vec3 xyz_coords;
3131
out vec4 frag_color;
3232

3333
#INSERT finalize_color.glsl
34+
#INSERT complex_functions.glsl
3435

3536
const int MAX_DEGREE = 3;
3637

37-
vec2 complex_mult(vec2 z, vec2 w){
38-
return vec2(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x);
39-
}
40-
41-
vec2 complex_div(vec2 z, vec2 w){
42-
return complex_mult(z, vec2(w.x, -w.y)) / (w.x * w.x + w.y * w.y);
43-
}
44-
45-
vec2 complex_pow(vec2 z, int n){
46-
vec2 result = vec2(1.0, 0.0);
47-
for(int i = 0; i < n; i++){
48-
result = complex_mult(result, z);
49-
}
50-
return result;
51-
}
52-
5338
vec2 poly(vec2 z, vec2[MAX_DEGREE + 1] coefs){
5439
vec2 result = vec2(0.0);
5540
for(int n = 0; n < int(n_roots) + 1; n++){

manimlib/shaders/poly_fractal/frag.glsl

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ uniform float n_roots;
2828
uniform float n_steps;
2929
uniform float julia_highlight;
3030
uniform float color_mult;
31+
uniform float black_for_cycles;
3132

3233
uniform vec2 frame_shape;
3334

@@ -36,24 +37,10 @@ in vec3 xyz_coords;
3637
out vec4 frag_color;
3738

3839
#INSERT finalize_color.glsl
40+
#INSERT complex_functions.glsl
3941

4042
const int MAX_DEGREE = 5;
4143

42-
vec2 complex_mult(vec2 z, vec2 w){
43-
return vec2(z.x * w.x - z.y * w.y, z.x * w.y + z.y * w.x);
44-
}
45-
46-
vec2 complex_div(vec2 z, vec2 w){
47-
return complex_mult(z, vec2(w.x, -w.y)) / (w.x * w.x + w.y * w.y);
48-
}
49-
50-
vec2 complex_pow(vec2 z, int n){
51-
vec2 result = vec2(1.0, 0.0);
52-
for(int i = 0; i < n; i++){
53-
result = complex_mult(result, z);
54-
}
55-
return result;
56-
}
5744

5845
vec2 poly(vec2 z, vec2[MAX_DEGREE + 1] coefs){
5946
vec2 result = vec2(0.0);
@@ -113,6 +100,10 @@ void main() {
113100
}
114101
color *= (1.0 + (color_mult - 1) * (n_iters - 5));
115102

103+
if(black_for_cycles > 0.0 && min_dist > 1e-2){
104+
color = vec4(0.0, 0.0, 0.0, 1.0);
105+
}
106+
116107
// if(julia_highlight > 0.0){
117108
// float factor = min_dist / distance(z, found_root);
118109
// factor *= pow(2.0, n_iters);

0 commit comments

Comments
 (0)