计算机图形学第8讲

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
种子像素入栈;当栈非空时作如下三步操作: (1)栈顶像素出栈; (2)填充出栈像素所在扫描行的连续像素段,直到遇到 边界像素为止,即每出栈一个像素,就对包含该像 素的整个扫描线区间进行填充; (3)在区间中检查与当前扫描线相邻的上下两条扫描线 的有关像素是否全为边界像素或已填充的像素,若 存在非边界、未填充边界的像素,则把每一区间的 最左像素取作种子像素入栈。
2013-6-21
信息科学与工程学院
22
内点表示法
内点表示:枚举出给定区域内所有像素的表示方法。
在内点表示法中,区域内的所有像素点着同一颜色,
而区域边界上的像素着不同的颜色。
以内点表示法为基础的区域填充算法称为泛填充算
法(Flood-fill Algorithm)。
2013-6-21
信息科学与工程学院
种子像素入栈;当栈非空时重复执行如下三步操作:
(1)栈顶像素出栈;
(2)将出栈像素置成填充色;
(3)检查出栈像素的4-邻接点,若其中某个像素点不是边界色
且未置成多边形色,则把该像素入栈。
2013-6-21 信息科学与工程学院 27
栈结构实现8-连通边界填充算法的算法步骤为: 种子像素入栈;当栈非空时重复执行如下三步操作: (1)栈顶像素出栈; (2)将出栈像素置成填充色; (3)检查出栈像素的8-邻接点,若其中某个像素点不是
的取舍问题。
y 12 11 10 9 8 7 6 5 4 3 2 1 1 2 3 4 5 6 7 8 9 10 11 12 x
图5-24 与多边形顶点相交的交点的处理
2013-6-21 信息科学与工程学院
上节回顾
6
3. 改进的有效边表算法(Y连贯性算法) 改进原理: • 处理一条扫描线时,仅对有效 边求交 • 利用扫描线的连贯性 • 利用多边形边的连贯性
表算法相当,但本算法用硬件实现后速度会
有很大提高。
2013-6-21
信息科学wenku.baidu.com工程学院
20
5.4.3
区域填充
区域填充是指从区域内的一个点(种子)开始, 由内向外将填充色扩展到整个区域内的过程
区域是指已经表示成点阵形式的填充图形,它是像素集 合。通常有内点表示和边界表示两种形式。
2013-6-21
信息科学与工程学院
13
算法步骤:
上节回顾
(1)初始化:构造边表,AET表置空; (2)将第一个不空的ET表中的边与AET表合并; (3)由AET表中取出交点对进行填充。 填充时设一布尔变量b(初值为假),令指针从AET中 第一个结点到最后一个结点遍历一次,每访问一个结点, 把b取反一次,若b为真,则把从当前结点的x值到下一 结点的x值结束的区间用多边形色填充。填充之后删除 y=ymax的边。(期间,x=round(x) ) ( 4)yi+1=yi+1,根据xi+1=xi+1/k计算并修改AET表,同时合并 ET表中y=yi+1 桶中的边,按次序插入到AET表中,形成 新的AET表; (5)AET表不为空则转(3),否则结束。
相等,则按照1/k由小到大排序。
2013-6-21
信息科学与工程学院
11
上节回顾
y 12 11 10 9 8 7 6 5 4 3 2 1 p1
p0 p2 p4
p6
p3 p5 1 2 3 4 5 6 7 8 9 10 11 12
x
(a)
2013-6-21
多边形P0P1P2P3P4P5P6P0
信息科学与工程学院 12
志 的 像 素 , inside 不 变 。 若 访 问 当 前 像 素 时 ,
inside为真,说明该像素在多边形内,则把该像素 置为填充颜色。
2013-6-21 信息科学与工程学院 18
算法描述为:
void edgemark_fill(多边形 polydef, int color) { 对多边形polydef 每条边进行直线扫描转换; inside = FALSE; for (每条与多边形polydef相交的扫描线y ) for (扫描线上每个像素x ) { if(像素 x 被打上边标志)inside = ! (inside); if(inside!= FALSE) else }
21
边界表示法
边界表示法:把位于给定区域的边界上像素一一列举出 来的方法。
在边界表示法中,区域边界上的像素着同一颜色,而区
域内的像素点不能着这种颜色。
由于边界以特殊颜色指定,填充算法可逐个像素地向外
处理,直到遇到边界颜色为止。以此为基础的区域填
充算法称为边界填充算法(Boundary-fill Algorithm)。
x为当前扫描线与边的交点 上节回顾 ymax为边所在的最大扫描线值 1/k为从当前扫描线到下一条扫描线间x的增量
2013-6-21 信息科学与工程学院 8
y 12 11 10 9 8 7 6 5 4 3 2 1 p1
y=8
上节回顾
P2P1
1.4 12 2/5
p0 p2 p4
p6
P0P1
7 12 -1
第 八 讲
2013-6-21
信息科学与工程学院
1
本节内容安排
上节回顾 5.4 多边形的扫描转换与区域填充(部分) 5.5 字符处理 小结、作业
2013-6-21
信息科学与工程学院
2
5.4.1 多边形的扫描转换
1. 什么是多边形的扫描转换 多边形的两种表示方法:
上节回顾
顶点表示:用多边形的顶点序列来刻划多边形。直观、几
上节回顾
xi+1 ,y i+1
1 xi,yi 1/k
图5-26 与多边形边界相交的两条 连续扫描线交点的相关性
2013-6-21 信息科学与工程学院 7
有效边(Active Edge):指与当前扫描线相交的多边形 的边,也称为活性边。 有效边表(Active Edge Table, AET):把有效边按与扫 描线交点x坐标递增的顺序存放在一个链表中,此链表 称为有效边表。 有效边表的每个结点: x ymax 1/k next
2013-6-21 信息科学与工程学院
上节回顾
16
边标志算法 基本思想:先用一种特殊的颜色在帧缓存中将多边形的边界勾
画出来,然后将着色的像素点依x坐标递增的顺序两两配对, 再将每一对像素所构成的扫描区间内的所有像素点置为填充 色。
分为两个步骤: (1)打标记 对多边形的每条边进行直线扫描转换,即将多边形边 界经过的像素打上边标志。 易知,每条扫描线上打标志的点的个数必为偶数; 对于多边形的局部最高点和最低点,多按“下闭上开” 的原则处理。
上节回顾
1 2 3 4 5 6 7 8 9 10 11 12
3
p3p2 6 -1/3
3
p3p4 5 3/4
8
p5p4 5 -1/2
8
p5p6 9 1/2
x|ymin 1 7 p2p1 12 2/5 12 -1 p0p1 桶
ymax 1/k next
7
9 p0p6
5
(c)
边表
2013-6-21
信息科学与工程学院
23
区域通常分为4-连通区域和8-连通区域两类。
一个点p的4-邻接点是指上、下、左、右四个相邻的点。
一个点p的8-邻接点是指上、下、左、右、左上、右上、 左下、右下八个相邻的点。
4 4 p 4 4 (a)p的4-邻接点 8 8 8 8 p 8 8 8 8 (b)p的8-邻接点
图5-33 邻接点的定义
何意义强、占内存少;不能直接用于面着色。
点阵表示是用位于多边形内的像素的集合来刻划多边形。
失去了许多重要的几何信息;便于运用帧缓冲存储器表示图形, 易于面着色。
P0 P1 P5 P4 P3
2013-6-21 信息科学与工程学院 3
P2
上节回顾
2. x-扫描线算法
基本思想:
按扫描线顺序,计算扫描线与多边形的相交区
2013-6-21 信息科学与工程学院 24
4-连通区域是指从区域上一点出发,通过访问
已知点的4-邻接点,在不越出区域的前提下, 遍历区域内的所有像素。 8-连通区域是指从区域上一点出发,通过访问 已知点的8-邻接点,在不越出区域的前提下,
遍历区域内的所有像素。
2013-6-21
信息科学与工程学院
25
(a)以边界表示的4-连通区域
(b)以内点表示的4-连通区域
(c)以边界表示的8-连通区域
(d)以内点表示的8-连通区域
图5-32 区域的边界表示和内点表示
1. 边界填充算法
算法实现见bound4a.c、cir_bian.c
算法的输入:种子点坐标(x,y),填充色和边界颜色。
栈结构实现4-连通边界填充算法的算法步骤为:
P0P6 7
p3 p5 1 2 3 4 5 6 7 8 9 10 11 12 x
9 P5P6
5
(a)
多边形P0P1P2P3P4P5P6P0
11.5 9
1/2
2013-6-21
信息科学与工程学院
9
边表(Edge Table)——方便有效边的建立和更新 边表的构造: (1)首先构造一个纵向链表,链表的长度为多边形所占有 的最大扫描线数,链表的每个结点,称为一个桶,其 对应多边形覆盖的每一条扫描线。 (2)将每条边的信息链入与该边最小y坐标(ymin )相对应 的桶处。也就是说,若某边的较低端点为ymin,则该边
2013-6-21 信息科学与工程学院 14
5.4.2
边缘填充算法
上节回顾
边缘填充算法基本思想 按任意顺序处理多边形的每条边。在处理每条边时,首先 求出该边与扫描线的交点,然后将每一条扫描线上交点 右方的所有像素取补。
2013-6-21
信息科学与工程学院
15
边缘填充算法最适用于具有帧缓存的图形系统, 算法简单,但对于复杂图型,每一像素可能被 访问多次,输入输出的量比有效边表算法大得 多。 栅栏填充算法 栅栏指的是一条过多边形顶点且与扫描线垂直的 直线。它把多边形分为两半。 基本思想:按任意顺序处理多边形的每条边,但 在处理每条边与扫描线的交点时,将交点与栅 栏之间的像素取补。
2013-6-21 信息科学与工程学院 17
边标志算法 (2)填充 对每条与多边形相交的扫描线,依从左到右的顺序,
按“左闭右开”的原则对扫描线上的像素点进行填
色。 使用一个布尔量inside来指示当前点是否在多边形内 的状态。Inside的初值为假,每当当前访问的像素 为被打上边标志的点,就把inside取反。对未打标
就放在相应的扫描线桶中。
2013-6-21
信息科学与工程学院
上节回顾
10
上节回顾 (3)每条边的数据形成一个结点,内容包括:该扫描线 与该边的初始交点x(即较低端点的x值),1/k,以
及该边的最大y值ymax。
x|ymin ymax 1/k next
(4)同一桶中若干条边按x|ymin 由小到大排序,若x|ymin
边界色且未置成多边形色,则把该像素入栈。
2013-6-21
信息科学与工程学院
28
特点:
可以用于填充带有内孔的平面区域。
把太多的像素压入堆栈
改进
通过沿扫描线填充水平像素段,来代替处理4-邻
接点和8-邻接点。
2013-6-21
信息科学与工程学院
29
沿扫描线填充水平像素段的4-连通边界填充算法步骤:
2013-6-21 信息科学与工程学院 19
putpixel (x, y, color);
putpixel (x, y, background);
}
与上两个算法相比,边标志算法避免了对帧缓 存中大量元素的多次赋值,但需逐条扫描线
地对帧缓存中的元素进行搜索和比较。
当用软件实现本算法时,速度与改进的有效边
a. 求交:计算扫描线与多边形各边的交点;
b. 排序:把所有交点按x值递增顺序排序; c. 配对:第一个与第二个,第三个与第四个等等;每对交点代 表扫描线与多边形的一个相交区间; d. 填色:把相交区间内的像素置成多边形颜色,把相交区间外
的像素置成背景色。
2013-6-21 信息科学与工程学院 5
存在问题:当扫描线与多边形顶点相交时,交点
2013-6-21 信息科学与工程学院 30
2. 泛填充算法
通常用于给区域重新着色。 算法的输入:种子点坐标(x,y),填充色和内部点的 颜色。 算法原理: 算法从指定的种子(x,y)开始,用所希望的填充颜色 赋给所有当前为给定内部颜色的像素点。
信息科学与工程学院
2013-6-21
31
8-连通泛填充算法步骤如下: 种子像素入栈;当栈非空时重复执行如下三步操作: (1)栈顶像素出栈; (2)将出栈像素置成填充色; (3)检查出栈像素的8-邻接点,若其中某个像素点是 给定内部点的颜色且未置成新的填充色,则把该 像素入栈。
间,再用要求的颜色显示这些区间的像素,完 成填充工作。
2013-6-21
信息科学与工程学院
4
算法步骤: 点的最小和最大y值(ymin和ymax)。
上节回顾
(1)确定多边形所占有的最大扫描线数,得到多边形顶
(2)从y=ymin到y=ymax,每次用一条扫描线进行填充。对
一条扫描线填充的过程可分为四个步骤:
相关文档
最新文档