计算机图形学(三)_图元的属性_9_ 填充区属性

来源:互联网 发布:windows 调节音量 编辑:程序博客网 时间:2024/04/28 20:41

九填充区属性

         多数图形软件包将填充区限定为多边形,因为它们用线性方程来描述。更进一步的限制是要求填充区是一个凸多边形,因此扫描线不会与两条以上的边相交。然而,我们一般可以填充任意指定的区域,包括圆、椭圆和其他有曲线边界的对象。而像绘画程序等应用系统则提供针对任意形状区域的填充功能。
        在将填充区映射到像素坐标后,光栅系统中填允一个区域有两个基本过程一个过程先确定穿过区域的扫描线重叠段。然后,沿这些重叠段的位置被设定为填充色。另一个区域填充方法是从一个给定内点开始,逐个像素向外“绘画”,直到碰到指定的边界条件。扫描线方法常用于简单的形状如圆或多边形边界的区域,而一般的图形软件包都使用这一填充方法。使用起始内点的填充方用于有较复杂边界的填充区及交互式绘画系统。

9.1填充模式

        一般的图形软件包提供的基本填充属性是内部的显示模式。我们可以将一区域显示为单一颜色、指定填充图案或只给出边界的“空心”模式。图4.17给出了这三种模式。我们也可以使用各种笔刷模式、颜色调和或纹理对场景中的指定区域进行填充。其他选项包括指定填充区域边界。对多边形来说,可以使用不同颜色、线宽和线型来给出其边。还可以为区域的前向面和后向面选择不同的显示属性。


        填充图案可以用一个为不同位置指定不同颜色的矩形颜色阵列来给出。或者说,一个填充图案可当做一个点阵来指定,其中每一位置指定显示一个选定颜色。描述填充图案的矩阵是一个应用于显示区域的掩模。有些图形系统提供对覆盖掩模的初始位置的选择。从该初始位置开始,掩模在水平和垂直方向反复填充直到所有显示区域都填满无重叠的掩模。在使用图案覆盖的填充区,矩阵掩模指出哪些像素应该使用特定颜色显示。这种用矩形图案填充一个区域的处理称为平铺(tiling),而矩形填充图有时称为平铺图案(tiling pattern)有时,系统中有预定义的填充图案,如图4.18所示的影线。



        可以通过确定图案在何处覆盖穿过填允区的扫描线来实现图案填充。从一个为图案填充指定的起始位置出发,将矩形图案按在垂直方向上跨越扫描线而在水平方向上跨越扫描线的像素位置的方式进行映射。图案矩阵按掩模的宽度和高度确定的间隔而重复使用。在图案覆盖的填充区域处,像素的颜色按掩模中存储的值进行设定。
        影线填充通过在区域内绘制一组线段来显示单影线或交叉影线。影线的间隔和斜率可作为影线表的参数来设定。作为一种选择,影线填充可当做一个生成一组对角线的图案矩阵来指定。
        作为填充图案开始位置的参考点(xp, yp)可设定在填允区内的任意位置例如,该参考点可指定在多边形的一个端点处。也可将参考点设在由区域坐标范围确定的包围矩形(或包围盒)的左下角。为了简化参考点的选择,有些软件包总是将显示窗口的坐标系原点作为图案起始位置。将(xp, yp)总是设定在坐标系原点还简化了在图案的每一元素映射到单个像素时的平铺操作。例如,如果图案中行的位置从1开始、从下往上计数,则图案位置(y mod ny+l, x mod nx+l)的颜色值赋给屏幕上的像素位置(x,y)。这里,ny和nx指定图案矩阵的行数和列数。然而,将图案起始点设在坐标系原点时,图案贴到屏幕背景上比贴到填充区更高效。使用同一图案的相邻或重叠填充不会在区域间生成边界。同样,使用同一图案重新定位或重新填充一个对象可能导致对象内部像素赋值的移位。相对于静止图案背景,移动的对象表现为透明的,而不是带着固定的内部图案移动。

9.2颜色调和填充区域

         也可以按照多种方式将填充图案和背景色相混合。图案和背景色混合时使用透明因子来确定背景中有多少应该混合到对象颜色中。我们也可以使用简单的逻辑操作或替代操作。图4.19给出了一个二进制(黑和白)系统中逻辑和替代操作怎样将2x2的填充图案与背景图案相混合的例子。


        某些使用调和颜色的填充方法称为软填充(soft-fill)色彩填充(tint-fill)算法。这些填充方法的一种作用是减弱在已经模糊的对象边界上的填充颜色,从而实现对边的反走样另一种用途是允许对原来用半透明笔刷填充的颜色区域进行重新涂色。这时,当前颜色与笔刷颜色以及区域“后面”的背景色进行混合。无论是何种情况,都要求新的颜色在区域上与当前填充颜色具有相同的变化。
         线性软填充算法(linear soft-fill algorithm)是这类填充的一个例子,该算法在将前景色F与单一背景色B (F=B)合并后绘制的区域上重新绘制。假如F和B的值为已知,那么通过检测帧缓存中当前的颜色内容,就可确定这些颜色原来是怎样组合的。区域内将要重新填充的每个像素的当前RGB颜色P,则是F和B的线性组合:

         其中,“透明度”系数t对于每个像素,其值在0与1之间。t值小于0.5,则背景色对区域内部颜色的作用比填充颜色要大。向量方程(4.2)包含了颜色的RGB三个成分,即


         因此,我们可以使用任意一个RGB颜色成分来计算参数t的值:

         其中,k = R, G或B,并且Fk ≠ Ba。理论一上参数t对每个RGB成分具有相同的值,但取整到整数会使得t对不同的成分具有不同的值。我们可以通过选择F和B间具有最大差的成分,从而使取整误差最小,然后采用修改的泛滥填充或边界填充程序,根据这个t值将新的填充颜色NF与背景色相混合。如以后13节所述的使用修改的泛滥填充或边界填充过程可实现这一混合。
        类似的软填充过程可以用于前景色与多个背景色相混合的区域,例如检测板图案。当两种背景
色B1和B2与前景色F相混合时,产生的像素颜色P为

        其中,颜色项系数t0, t1和(1- t0 - t1)的和必须等于1。我们可用RGB颜色三个分量中的两个来建立两个联立方程从而求解两个比例项参数t0和t1。然后,使用这些参数将新的填充颜色与两种背景色相混合以得到新的像素颜色。对于三个背景色和一个前景色或两个背景色和两个前景色,则需要所有三个RGB方程来得到四种颜色的相对量。然而,对于有些前景色和背景色的混合,使用两个或三个RGB方程则无法求解。在颜色值非常类似或相互成比例时,将出现这种情况。
0 0