《计算机图形学教学资料》第6讲-多边形填充.pptx
2025/5/131本章内容直线的扫描转换圆与椭圆的扫描转换区域填充二维裁剪字符生成反走样
第三节区域填充区域填充是指:在一个封闭的二维图形内部象素上着色(纹理、图案)。也称为:多边形的扫描转换。本节内容:矩形的扫描转换多边形区域填充图案填充
矩形的扫描转换2025/5/133logo可利用矩形的简单性提高扫描转换的效率。问题:边界(共享边界)像素的绘制?解决:象素中心定位于矩形的左、下边界时绘制象素点。该规则适用于线画矩形及多边形以及共享顶点的情形。
填充区间:区间端点由扫描线与多边形边界线段的交点确定多边形填充—直线的扫描转换算法
2025/5/135注:多边形上的区间(a)原始端点由中点算法确定(b)限制端点在多边形内
实现区间填充的三个步骤01计算扫描线与多边形边界线段的交点02按照x升序排列交点03填充多边形内交点对之间的所有像素?:水平线段如何处理04
区间填充策略2025/5/137y=8为例:排序后的交点x坐标列表为:(2,4.5,8.5,13)01如何填充?02
4舍?还是5入?2025/5/138当交点的x坐标值是分数时需进行舍入运算。(b)左端点:向上取整右端点:向下取整
内?或者外?2025/5/139当交点的x坐标值是整数时,需确定该点是内点拟或是外点。(b)在右边界:外点在左边界:内点
交点为尖点交点Pl为尖点时,可计数为:1,2或者0。如下图P0P0P0P0P1P1P1P1P2P2P2P2(a)(b)(c)(d)a)(b)计数为1个交点(c)计数为2个交点(d)计为0个交点规则:端点纵坐标是ymin时计数加1;端点纵坐标是ymax时不计数
续:在具体实现时,对交点的后处理过程可以转化为对边界线段进行的预处理。
扫描线与多边形边界线段交点的计算(1)交点特点:Y方向坐标值满足:交点界于线段两端点间:第一个交点是其端点之一,不妨设为?:后续交点的计算取整?!
2025/5/1313扫描线与多边形边界线段交点的计算(2)记前一扫描线与边界线段交点为当前扫描线与该边界线段有否交点可通过其纵坐标值确定。记当前扫描线与边界线段交点为x的取整需针对边界线段在多边形的左右两侧做不同的处理:左侧边:向右取整,且当交点落在边界上时视做内部点右侧边:向左取整,且当交点落在边界上时视做外部点
2025/5/1314考虑到,为消除浮点数运算,以交点在左侧边为例,可增设计数器Counter,并改写交点公式为:扫描线与多边形边界线段交点的计算(3)下一个交点对应计算器的值为:Counter的初始值可以是:
仍以交点在左侧边为例。判断Counter的值是否大于0若不是,则直接取为xi;若是,则进行如下运算:问题:交点在右侧边时的处理扫描线与多边形边界线段交点的计算(4)上述步骤反复执行k次,直至Counter的值小于0,此时xi+k的值即为交点向右取整的结果。其截断部分仍是。此时,计数器刷新为:
活性边表AET
(active-edgetable)引入如下的数据结构记录交点92092-5/211103/211130?P6P1P5P6P4P5P3P4Line9AETpointer1111.53/211130?P4P5P3P4Line10AETpointer引入Counter?92094.5-5/2118.53/211130?P6P1P5P6P4P5P3P4Line8AETpointer
边表(ET)的初始化2025/5/131737-5/2573/2?920?11130?97-5/21173/2??????????
直线的扫描转换填充算法生成初始边表ET;把扫描线的y值设为ET的最小y坐标;AET初始化为空;循环直至满足终止条件:AET和ET为空从ET取值(满足ymin=y的线段)放到AET;从AET中删除满足y=ymax的线段,然后按照x坐标排序;填充既定区间;y增加1;针对新的y值刷新AET中各项的x值.
算法伪代码2025/5/1319Polygongfill(polydef,color)Pointpolydef[];intcolor;{for(各条