问题:
使用最大迭代次数为 Mandelbrot 集着色的标准方法导致缩小时颜色缺乏,放大时颜色过饱和。挑战在于创建一种着色方案,在不同的缩放级别下保持多种颜色。
解决方案:
1。基于直方图的颜色映射:
2.小数迭代计数(Mandelbrot 转义):
其他增强功能:
示例实现:
// 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); }
结果:
这种方法结合了基于直方图的着色、分数迭代计数和多遍重新着色,以实现生动且色彩丰富的表示Mandelbrot 设置在所有缩放级别。
以上是如何在不同缩放级别的 Mandelbrot 集中保持颜色鲜艳度?的详细内容。更多信息请关注PHP中文网其他相关文章!