��a) 反走样固定宽度直线的区域采样方法
��假定每个象素都是一个面积等于1的小正方形矩形区域,将直线段看作宽度为一个像素的狭长矩形,如图2.10所示。这时可以采用简单的区域采样方法进行反走样。当直线段的矩形边界与象素的边界有交时,求出两者相交区域的面积,然后根据相交区域面积的大小确定该象素的亮度值。
��对于图2.10中的任何一个阴影像素而言,上述阴影面积A是介于0-1之间的正数,用它乘以象素的最大光强为Imax,则该像素的光强

��Pietteway和Winkins对Bresenham画线算法稍作改进后得到像素在多边形内的面积近似值,并用它调制像素的光强。改进后的Bresenham反走样画线算法如下:

图2.10 固定宽度直线


�BresenhamAntialiasingLine(int x1, int y1, int x2, int y2,int I)
�// (x1, y1),(x2, y2)分别是直线的起点和终点
�// I是画线的最大亮度值
�{
��int x,y,dx,dy,m,w,e;
��x = x1;
��y = y1;
��dx = x2-x1;
��dy = y2-y1;
��m = I*dy/dx;
��w = I-m;
��e = I/2;
��SetPixel(x,y,m/2);
��while (x < x2)
��{
���if (e < w)
���{
�����x ++;
�����e += m;
���}
���else
���{
����x ++;
����y++;
����e -= m;
���}
���SetPixel(x,y,e);
��}
�}


��b) 加权区域反走样算法
��从采样理论的角度考虑,区域采样方法相当于使用盒式滤波器进行前置滤波后再采样。区域采样方法有两个缺点:(1)象素的亮度与相交区域的面积成正比,而与相交区域落在象素内的位置无关,这在某种程度上仍然会导致阶梯现象。(2)直线条上沿理想直线方向的相邻两个象素有时会有较大的亮度差,特别是当直线是一条接近水平或接近垂直的直线时,这种现象就会比较突出。
��为了使靠近理想直线的像素能够分配到更大的亮度值,可以采用圆锥形滤波器,如图2.11所示。其基本思想是:建立一个底圆半径为一个像素单位,高为1的圆锥,并使底圆中心位于当前像素中心。当直线经过该像素时,直线的矩形区域与该圆锥底面的相交区域上对滤波器的积分,就是该像素的亮度值。在几何上,这个积分的结果相当于用过直线矩形区域的两边沿、且垂直于像素区域的一对平面,与该圆锥相切割所得到的三维物体的体积。
��这种区域采样法的反走样效果较好。为了简化计算,我们可以采用离散的区域反走样方法。

图2.11 圆锥形滤波器