frag.glsl 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #version 330
  2. uniform vec2 parameter;
  3. uniform float opacity;
  4. uniform float n_steps;
  5. uniform float mandelbrot;
  6. uniform vec3 color0;
  7. uniform vec3 color1;
  8. uniform vec3 color2;
  9. uniform vec3 color3;
  10. uniform vec3 color4;
  11. uniform vec3 color5;
  12. uniform vec3 color6;
  13. uniform vec3 color7;
  14. uniform vec3 color8;
  15. in vec3 xyz_coords;
  16. out vec4 frag_color;
  17. #INSERT finalize_color.glsl
  18. #INSERT complex_functions.glsl
  19. const int MAX_DEGREE = 5;
  20. void main() {
  21. vec3 color_map[9] = vec3[9](
  22. color0, color1, color2, color3,
  23. color4, color5, color6, color7, color8
  24. );
  25. vec3 color;
  26. vec2 z;
  27. vec2 c;
  28. if(bool(mandelbrot)){
  29. c = xyz_coords.xy;
  30. z = vec2(0.0, 0.0);
  31. }else{
  32. c = parameter;
  33. z = xyz_coords.xy;
  34. }
  35. float outer_bound = 2.0;
  36. bool stable = true;
  37. for(int n = 0; n < int(n_steps); n++){
  38. z = complex_mult(z, z) + c;
  39. if(length(z) > outer_bound){
  40. float float_n = float(n);
  41. float_n += log(outer_bound) / log(length(z));
  42. float_n += 0.5 * length(c);
  43. color = float_to_color(sqrt(float_n), 1.5, 8.0, color_map);
  44. stable = false;
  45. break;
  46. }
  47. }
  48. if(stable){
  49. color = vec3(0.0, 0.0, 0.0);
  50. }
  51. frag_color = finalize_color(
  52. vec4(color, opacity),
  53. xyz_coords,
  54. vec3(0.0, 0.0, 1.0)
  55. );
  56. }