
Problem:
The standard method of coloring the Mandelbrot set using max iterations leads to a lack of colors when zooming out and an oversaturation of colors when zooming in. The challenge is to create a coloring scheme that maintains a wide range of colors throughout various zoom levels.
Solution:
1. Histogram-Based Color Mapping:
2. Fractional Iteration Count (Mandelbrot Escape):
Additional Enhancements:
Example Implementation:
// Vertex Shader
layout(location = 0) in vec2 pos;
out vec2 p;
void main()
{
p = pos;
gl_Position = vec4(pos, 0.0, 1.0);
}
// Fragment Shader
uniform vec2 p0;
uniform float zoom;
uniform int n;
uniform int sh;
uniform int multipass;
in vec2 p;
out vec4 col;
// Compute fractional iteration count
float mu = m + frac = n + 1 - log(log(sqrt(xx + yy)) / log(2.0));
mu *= float(1 << sh);
int i = int(mu);
// Multi-pass coloring
if (multipass != 0)
{
// Quantize color based on iterations
float r = (i >> 0) & 255; r /= 255.0;
float g = (i >> 8) & 255; g /= 255.0;
float b = (i >> 16) & 255; b /= 255.0;
col = vec4(r, g, b, 255);
}
// Visible spectrum color gradient
else
{
float q = float(i) / float(N);
q = pow(q, 0.2);
col = vec4(spectral_color(400.0 + (300.0 * q)), 1.0);
}Result:
This approach combines histogram-based coloring, fractional iteration count, and multi-pass recoloring to achieve a vivid and color-rich representation of the Mandelbrot set at all zoom levels.
The above is the detailed content of How to Maintain Color Vibrancy in the Mandelbrot Set Across Different Zoom Levels?. For more information, please follow other related articles on the PHP Chinese website!