Problem:
Die Standardmethode zum Färben des Mandelbrot-Sets mit maximalen Iterationen führt beim Verkleinern zu einem Mangel an Farben und beim Vergrößern zu einer Übersättigung der Farben. Die Herausforderung besteht darin, ein Farbschema zu erstellen, das eine breite Farbpalette über verschiedene Zoomstufen hinweg beibehält.
Lösung:
1. Histogrammbasierte Farbzuordnung:
2. Anzahl der gebrochenen Iterationen (Mandelbrot-Escape):
Zusätzliche Verbesserungen:
Beispielimplementierung:
// 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); }
Ergebnis:
Dieser Ansatz kombiniert histogrammbasierte Farbgebung, fraktionierte Iterationszählung und Neufärbung in mehreren Durchgängen, um eine lebendige und farbreiche Darstellung der zu erreichen Mandelbrot-Set auf allen Zoomstufen.
Das obige ist der detaillierte Inhalt vonWie bleibt die Farbbrillanz im Mandelbrot-Satz über verschiedene Zoomstufen hinweg erhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!