Problème :
La méthode standard de coloration de l'ensemble de Mandelbrot en utilisant des itérations maximales entraîne un manque de couleurs lors d'un zoom arrière et une sursaturation des couleurs lors d'un zoom avant. Le défi est de créer un schéma de couleurs qui conserve une large gamme de couleurs à travers différents niveaux de zoom.
Solution :
1. Cartographie des couleurs basée sur l'histogramme :
2. Nombre d'itérations fractionnaires (Mandelbrot Escape) :
Améliorations supplémentaires :
Exemple de mise en œuvre :
// 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); }
Résultat :
Cette approche combine une coloration basée sur un histogramme, un nombre d'itérations fractionnaires et une recoloration multi-passes pour obtenir une représentation vive et riche en couleurs du Mandelbrot réglé à tous les niveaux de zoom.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!