9填充区属性
多数图形软件包将填充区限定为多边形,由于它们用线性方程来描写。更进1步的限制是要求填充区是1个凸多边形,因此扫描线不会与两条以上的边相交。但是,我们1般可以填充任意指定的区域,包括圆、椭圆和其他有曲线边界的对象。而像绘画程序等利用系统则提供针对任意形状区域的填充功能。
在将填充区映照到像素坐标后,光栅系统中填允1个区域有两个基本进程。1个进程先肯定穿过区域的扫描线堆叠段。然后,沿这些堆叠段的位置被设定为填充色。另外一个区域填充方法是从1个给定内点开始,逐一像素向外“绘画”,直到碰到指定的边界条件。扫描线方法经常使用于简单的形状如圆或多边形边界的区域,而1般的图形软件包都使用这1填充方法。使用起始内点的填充方用于有较复杂边界的填充区及交互式绘画系统。
9.1填充模式
1般的图形软件包提供的基本填充属性是内部的显示模式。我们可以将1区域显示为单1色彩、指定填充图案或只给出边界的“空心”模式。图4.17给出了这3种模式。我们也能够使用各种笔刷模式、色彩调和或纹理对场景中的指定区域进行填充。其他选项包括指定填充区域边界。对多边形来讲,可使用不同色彩、线宽和线型来给出其边。还可以为区域的前向面和后向面选择不同的显示属性。
填充图案可以用1个为不同位置指定不同色彩的矩形色彩阵列来给出。或说,1个填充图案可当作1个点阵来指定,其中每位置指定显示1个选定色彩。描写填充图案的矩阵是1个利用于显示区域的掩模。有些图形系统提供对覆盖掩模的初始位置的选择。从该初始位置开始,掩模在水平和垂直方向反复填充直到所有显示区域都填满无堆叠的掩模。在使用图案覆盖的填充区,矩阵掩模指出哪些像素应当使用特定色彩显示。这类用矩形图案填充1个区域的处理称为平铺(tiling),而矩形填充图有时称为平铺图案(tiling
pattern)有时,系统中有预定义的填充图案,如图4.18所示的影线。
可以通过肯定图案在何处覆盖穿过填允区的扫描线来实现图案填充。从1个为图案填充指定的起始位置动身,将矩形图案按在垂直方向上逾越扫描线而在水平方向上逾越扫描线的像素位置的方式进行映照。图案矩阵按掩模的宽度和高度肯定的间隔而重复使用。在图案覆盖的填充区域处,像素的色彩按掩模中存储的值进行设定。
影线填充通过在区域内绘制1组线段来显示单影线或交叉影线。影线的间隔和斜率可作为影线表的参数来设定。作为1种选择,影线填充可当作1个生成1组对角线的图案矩阵来指定。
作为填充图案开始位置的参考点(xp, yp)可设定在填允区内的任意位置。例如,该参考点可指定在多边形的1个端点处。也可将参考点设在由区域坐标范围肯定的包围矩形(或包围盒)的左下角。为了简化参考点的选择,有些软件包总是将显示窗口的坐标系原点作为图案起始位置。将(xp, yp)总是设定在座标系原点还简化了在图案的每元素映照到单个像素时的平铺操作。例如,如果图案中行的位置从1开始、从下往上计数,则图案位置(y
mod ny+l, x mod nx+l)的色彩值赋给屏幕上的像素位置(x,y)。这里,ny和nx指定图案矩阵的行数和列数。但是,将图案起始点设在座标系原点时,图案贴到屏幕背景上比贴到填充区更高效。使用同1图案的相邻或堆叠填充不会在区域间生成边界。一样,使用同1图案重新定位或重新填充1个对象可能致使对象内部像素赋值的移位。相对静止图案背景,移动的对象表现为透明的,而不是带着固定的内部图案移动。
9.2色彩调和填充区域
也能够依照多种方式将填充图案和背风景相混合。图案和背风景混合时使用透明因子来肯定背景中有多少应当混合到对象色彩中。我们也能够使用简单的逻辑操作或替换操作。图4.19给出了1个2进制(黑和白)系统中逻辑和替换操作怎样将2x2的填充图案与背景图案相混合的例子。
某些使用调和色彩的填充方法称为软填充(soft-fill)或色采填充(tint-fill)算法。这些填充方法的1种作用是,减弱在已模糊的对象边界上的填充色彩,从而实现对边的反走样。另外一种用处是允许对原来用半透明笔刷填充的色彩区域进行重新涂色。这时候,当前色彩与笔刷色彩和区域“后面”的背风景进行混合。不管是何种情况,都要求新的色彩在区域上与当前填充色彩具有相同的变化。
线性软填充算法(linear soft-fill algorithm)是这类填充的1个例子,该算法在将前风景F与单1背风景B (F=B)合并后绘制的区域上重新绘制。假设F和B的值为已知,那末通过检测帧缓存中当前的色彩内容,便可肯定这些色彩原来是怎样组合的。区域内将要重新填充的每一个像素确当前RGB色彩P,则是F和B的线性组合:
其中,“透明度”系数t对每一个像素,其值在0与1之间。t值小于0.5,则背风景对区域内部色彩的作用比填充色彩要大。向量方程(4.2)包括了色彩的RGB3个成份,即
因此,我们可使用任意1个RGB色彩成份来计算参数t的值:
其中,k = R, G或B,并且Fk ≠ Ba。理论1上参数t对每一个RGB成份具有相同的值,但取整到整数会使得t对不同的成份具有不同的值。我们可以通过选择F和B间具有最大差的成份,从而使取整误差最小,然后采取修改的泛滥填充或边界填充程序,根据这个t值将新的填充色彩NF与背风景相混合。如以后13节所述的使用修改的泛滥填充或边界填充进程可实现这1混合。
类似的软填充进程可以用于前风景与多个背风景相混合的区域,例如检测板图案。当两种背景
色B1和B2与前风景F相混合时,产生的像素色彩P为
其中,色彩项系数t0, t1和(1- t0 - t1)的和必须等于1。我们可用RGB色彩3个份量中的两个来
建立两个联立方程,
从而求解两个比例项参数t0和t1。然后,使用这些参数将新的填充色彩与两种背风景相混合以得到新的像素色彩。
对3个背风景和1个前风景或两个背风景和两个前风景,则需要所有3个RGB方程来得到4种色彩的相对量。但是,
对有些前风景和背风景的混合,使用两个或3个RGB方程则没法求解。在色彩值非常类似或相互成比例时,将出现这类情况。