我正在尝试使用 OpenGL 可视化 Mandelbrot 集,并且在平滑着色方面发现了非常奇怪的行为。
让我们假设,对于当前的复数值,算法在被证明大于 2 的迭代C
后已经逃逸。n
Z
我编写了这样的着色部分:
if(n==maxIterations){
color=0.0; //0.0 is black in OpenGL when put to each channel of RGB
//Points in M-brot set are colored black.
} else {
color = (n + 1 - log(log(abs(Z)))/log(2.0) )/maxIterations;
//continuous coloring algorithm, color is between 0.0 and 1.0
//Points outside M-brot set are colored depending of their absolute value,
//from brightest near the edge of set to darkest far away from set.
}
glColor3f(color ,color ,color );
//OpenGL-command for making RGB-color from three channel values.
问题是,这不能很好地工作。一些平滑是显而易见的,但并不完美。
但是当我添加两个额外的迭代时(只是在没有解释的地方发现了这个)
Z=Z*Z+C;
n++;
在计算颜色之前的“else”-分支中,图像出来是绝对的、优雅的平滑。
为什么会这样?为什么我们需要在检查点在集合后在着色部分放置额外的迭代?