先将上一章节的图放大8倍,看看局部:
边界的锯齿很清晰很明显很刺眼啊,有木有?我们现在要做的就是使得这些锯齿不那么清晰不那么明显不那么刺眼。简单地说,使边界模糊。
之前的图是每个像素点设置一个颜色值,相当于将像素中心位置的颜色设置给了整个像素。所以,如果两个像素点中心位置的颜色值相差比较大时,这两个像素点就会产生清晰的边界。那么问题来了,怎么使得两个像素点的边界模糊呢?
书上的做法是:
针对每个像素点随机采样100次,获得100个颜色值,然后将这100个颜色值的平均值设置为整个像素点的颜色值。
这样做为什么可以模糊边界呢?
先看两张示意图:
同一块区域,4个像素点时如左图,16个像素点时就有可能是右图这样子。
区域中左上四分之一区域:
采样一次时获得的就是中心位置的颜色值(黄色),然后将这个颜色值设置为这个四分之一区域的颜色值。
采样四次时,每次采样获得的可能是相邻两个四分之一区域中心点之间的颜色值。原左上四分之一区域的四个采样点的值可能和原左上四分之一区域(黄色)、左下四分之区域(红色)、右上四分之一区域(绿色)的原中心位置的颜色值相同。如右图中左上四分之一区域,包含了右边的绿色和下边的红色。如果此时将左上四分之一区域的颜色整体设置为该区域内四个采样值值的平均值,该值和右边、下边的值就相对比较接近了,也就是模糊了边界。
以上是个人的理解,下面贴出书上的代码:(只贴出相对之前有改动的函数,红色字体部分为函数中有改动的地方)
----------------------------------------------main.cpp----------------------------------------------
main.cpp
int main(){
int nx = 200;
int ny = 100;
intns = 100;
ofstream outfile(".\\results\\Antial