计算机图形学 第4讲 图形裁剪
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
具体计算时,把P0P1写成其参数方程:
其中Δx=x1-x0,Δy=y1-y0 窗口内线段应满足 x x
x x0 u x y y0 u y
0 u 1
L 0 u x xR yB y0 u y yT
求 u!
27
梁友栋-Barsky裁剪算法
1000 0000
1010 0010
ymin
按位运算
0101
0100
0110
11
Cohen-Sutherland裁剪算法
延长窗口的四条边线(ymin,ymax,xmin,xmax),将二维 平面分成九个区域,区域赋予4位编码CtCbCrCl
1 if y ymax Ct 0 otherwise
P1 保留存在最近可见点部分,舍弃另一部分
20
中点分割算法
当线段P1P2求出中点P后,舍弃线段的哪部分? 若如果P1与P同侧,移动P1点;(即可能的交点 只能出现在PP2段) if ( (C1 & C) != 0 ) P1 = P; 若P1与P不同侧,移动P2点。(即可能的交点只 能出现在P1P段) if ( (C1 & C) == 0 ) P2 = P;
当pi=0时, 若qi<0
则P0P1是完全不可见的
若qi≥0,
则P0P1平行于裁剪边界,并且至少部分在窗口内
y
F
yT yB C xL B
E
D xR
A x 33
梁友栋-Barsky裁剪算法
算法步骤
1、初始化线段交点的参数:u1=0,u2=1; 2、计算出4个裁剪边界的p、q值; 3、调用函数clipTest(),在函数中根据p、q来判断:是 舍弃线段还是改变交点的参数。
xL
xR
x 28
梁友栋-Barsky裁剪算法
窗口边界的四条边分成两类,一类称为始边,另一
类称为终边
当Δx≥0时,称x=xL为始边, x=xR为终边 当Δx<0时,称x=xL为终边, x=xR为始边 当Δy≥0时,称y=yB为始边, y=yT为终边 当Δy<0时,称y=yB为终边, y=yT为始边
ymax
xmin xmax
ymin
xmin ≤ x ≤ xmax and ymin ≤ y ≤ ymax
满足上述不等式组的点则在窗口范围内,则保留; 反之,该点落在窗口外,应裁剪
5
直线的裁剪
对于矩形窗口
任何直线至多只有一段处于该窗口之内 即在此窗口范围内永远不会产生一条直线的两条或更 多的可见部分线段 判断直线与窗口的位置关系,确定该直线是完全可见 、部分可见或完全不可见 输出处于窗口内线段的端点,并显示此线段
特点:
简单,易实现
依次裁剪在窗口外部分,直到直线完全处于窗口内
快速判断线段的完全可见和显然不可见
巧妙的编码方法
18
中点分割算法
类似于Cohen-Sutherland算法 将直线的两端点P1、P2编码得:C1、C2; 根据C1和C2的具体值,可以有三种情况:
C1=C2=0,表明两端点全在窗口内,因而整个线段
12
Cohen-Sutherland裁剪算法
对线段的每个顶点,根据其所在区域赋予此编码
if (x < XL) c |= 0x0001; … 一个在窗口内的顶点编码为0000
1001 1000 1010
0001
0000
0010
0101
0100
0110
13
Cohen-Sutherland裁剪算法
16
C
Cohen-Sutherland裁剪算法
求交
将两个端点的编码CtCbCrCl进行逻辑或操作, 根据其结果中1的位置来确定可能相交的窗口边 求交按照固定的顺序来进行(左右下上或上下右左) 一条线段与窗口最多求交4次
F D E
A(1010)
C
B(0101)
17
Cohen-Sutherland裁剪算法
基本思想:
6
直线的裁剪
整条线在窗口之内
不需剪裁,显示整条线段
整条线在窗口之外
不需剪裁,不显示整条线段
部分线在窗口之内
求出线段与窗口边界的交点 将窗口外的线段部分剪裁掉 显示窗口内的部分
7
直线裁剪的效率策略
快速排除
完全在窗口内 完全在窗口外的直线
若是部分在窗口内的情况
第6讲 图形裁剪算法
中南大学地球科学与信息物理学院地理信息系
图形裁剪
计算机内部存储的图形数据量往往比较大,而屏幕 显示的只是图的局部部分。因此需要确定图形中哪 些部分落在显示区之内,哪些落在显示区之外,以 便只显示落在显示区内的那部分图形 窗口:矩形
2
图形裁剪的策略
先变换后裁剪
将图形经过扫描转换后变成像素的集合,然后对图形中 的每一个像素进行裁剪 将原始图形进行裁剪,保留窗口内的可见部分,舍弃窗 口外的不可见部分。然后对窗口内保留的这部分图形进 行扫描转换
25
梁友栋-Barsky裁剪算法
算法的基本思想:当要裁剪的线段是P0P1, P0P1和窗口边 界交于A,B,C,D四点。从A,B和P0三点中找出最靠近的P1的 点,从C,D和P1中找出最靠近P0的点。
y
yT P0 A B P1 C P0C是P0P1线段 上的可见部分 D
yB
xL
xR
x 26
梁友栋-Barsky裁剪算法
y P0 P1
yT
A
P1 B P0
yB xL
xR
x
29
梁友栋-Barsky裁剪算法
可知边界交点的参数:
ui qi / pi , pi 0.
当pi<0时, 求得的ti必是P0P1和始边的交点的参数 当pi>0时, ui必是P0P1和终边的交点的参数
30
梁友栋-Barsky裁剪算法
求出P0P1和两条始边的交点的参数u0’和u0’’,令 u0 = max(u0’,u0’’,0) 则u0 就是图中A、B和P0三点中最靠近P1的点的参数 求出P0P1和两条终边的交点的参数u1’和u1’’,令 u1 = min(u1’,u1’’,1) 则u1 就是图中C、D和P1三点中最靠近P0的点的参数
先排除简单情形:
若某线段两个端点的四位二进制编码全为0000 线段位于窗口内,显示之
若对两端点的四位二进制编码进行逻辑与运算(&) 结果不为0 线段位于窗口外,直接舍弃
1001 0001 1000 0000 0100 1010 0010
再裁剪 递归执行
0101
0110
14
Cohen-Sutherland裁剪算法
STEP5 :按照中点算法的求交规则:
若P1和P同侧,移动P1点; if((C1&C)!=0) P1=P; 否则,移动P2点。 else P2=P; GOTO STEP3,直到P1和P2相差一个单位时:令交点为P2,对暂存器断 点P2裁剪
23
中点分割算法
特点: 求交点的次数(n)与线段长度(L)有关,其 关系为:L=2n 。
1 if x xmax Cr 0 otherwise
Baidu Nhomakorabea
1 Cb 0 1 Cl 0
if y ymin otherwise if x xmin otherwise
第一位为1:端点处于上边界的上方 第二位为1:端点处于下边界的下方 第三位为1:端点处于右边界的右方 第四位为1:端点处于左边界的左方 否则,相应位为0
(1) 当p<0时,参数r用于更新u0:(u0=max{u0,rk}) (2) 当p>0时,参数r用于更新u1:(u1=min{u1,rk}) (3)如果更新了u0或u1后,使u0>u1,则舍弃该线段 (4)当p=0且q<0时,因为线段平行于边界并且位于边界之外, 则舍弃该线段。
4、p、q的4个值经判断后,如果该线段未被舍弃,则裁 剪线段的端点坐标由参数u1和u2的值决定。
15
Cohen-Sutherland裁剪算法
例:如图,裁剪AB、CD、EF直线段。
E F A B D
解:根据编码算法,各直线段的端点四位二进制编码如下: A:0000 B:0000 A,B编码全为0,AB直接保留 C:0010 D:0110 C,D编码进行逻辑与运算,结果非0,CD 直线段直接舍弃 E:0001 F:0000 E,F编码进行逻辑与运算,结果为0,此时 应求EF与窗口边界的交点
21
中点分割算法
将中点分割进行到底!
可收敛到最近可见点
22
中点分割算法
求交点
STEP1 :令窗外端点为P1,如果窗外点不是P1,则P1和P2交换端点; STEP2:保留窗内端点P2到暂存器里; STEP3 :对P1编码为C1; STEP4 :用中点公式求出中点,并编码得C;
则求线段与窗口边界的交点,在交点处把线段分为两段 其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处 理
10
Cohen-Sutherland裁剪算法
如何快速排除
完全在窗口内 完全在窗口外的直线
编码
9个区域 4位编码
CtCbCrCl
xmax ymax
xmin
1001 0001
减少直线与窗口边界的求交次数和每次的求交 计算量
8
直线裁剪算法
Cohen-Sutherland裁剪算法 中点分割算法 梁友栋-Barsky裁剪算法
9
Cohen-Sutherland裁剪算法
基本思想:对于每条待裁剪的线段P1P2分三种情况 处理
若P1P2完全在窗口内,则显示该线段 若P1P2完全在窗口外,则丢弃该线段 若线段不满足上述条件
例如:线段长度为256,则求交点的次数为8。
求出的交点是边界上的有效交点(最近可见点 ),而非边界及其延长线上的交点
Cohen-Sutherland直线裁剪算法:
边界上或者边界的延长线上的交点
求中点:加法与除法,容易硬件实现
24
梁友栋-Barsky裁剪算法
梁友栋
生于1935年7月,福建福州人 1956-1960年:复旦大学研究生,师从苏步青先生学习几 何理论 1960年研究生毕业后任教于浙江大学数学系 1984-1990年任浙大数学系主任 Liang, Y.D., and Barsky, B., "A New Concept and Method for Line Clipping", ACM Transactions on Graphics, 3(1):1-22, January 1984.
34
梁友栋-Barsky裁剪算法
特点 通常比Cohen-Sutherland算法效率更高
也在窗内,应予保留。 C1&C2≠0,表明两端点全在窗口外同侧,整个线段全 在窗外,应予舍弃。 不属于上面两种情况,均需要求交点,并进行裁剪
裁剪:裁剪一端,得到最近可见点 求最近可见点(交点):中点分割算法!
19
中点分割算法
中点
观察:中点将线段P1P2分为两部分,必定有一部分 存在最近可见点(交点) P P2
y yT yB P0 xL A B t0 xR x 31 P1 D C t1
当u1>u0时,参数t∈[u0, u1]的线段就是P0P1的可见 部分 P1 D 当u1<u0时,整个直线段为不可见
y u0
yT
u1
B C C
P1 D u1
yB
B
P0
A P0
A
u0 xR x 32
xL
梁友栋-Barsky裁剪算法
裁剪: 若线段既不能直接保留,也不能直接舍弃
它可能与窗口相交
对线段进行再分割,并找到与窗口边线的一个交点,
根据交点位置,赋予4位二进制编码, 对分割后的线段 舍弃一定在窗口外部分 另一部分做进一步检查
1001 0001 0101 1000 0000 0100 1010 0010 0110
不等式可写作: u x
x0 xL ,
u x xR x0 , u y y 0 y B ,
即 upi qi 线段与裁剪边界的交点有
u y yT y0 .
y yT yB
P1 D P0 C
upi qi ,
A
B
ui qi / pi , pi 0.
先裁剪后变换
先裁剪后变换! 可以省去许多不必要的扫描转换的工作
3
图形裁剪的处理步骤
图形裁剪的目的:
判断图形元素是否在所考虑的区域内 如在区域内,则进一步求出区域内的那一部分
处理步骤:
点在区域内外的判断 计算图形元素与区域边界的交点
4
点的裁剪
对于一点P(x,y),要判断其是否可见