计算机图形学第六章 图形裁剪_第1页
计算机图形学第六章 图形裁剪_第2页
计算机图形学第六章 图形裁剪_第3页
计算机图形学第六章 图形裁剪_第4页
计算机图形学第六章 图形裁剪_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-6-27计算机图形学演示稿 纪玉波制作 (C) 1 第六章第六章 图形裁剪图形裁剪 在用户坐标系中定义的图形往往是大而复杂的,而输 出设备如显示屏幕的尺寸及其分辨率却是有限的,为了 能够清晰地观察某一部分或对其进行某些绘图操作,就 需要将所关心的这一局部区域的图形从整个图形中区分 出来,这个区分指定区域内和区域外的图形过程称为裁剪, 所指定的区域称为裁剪窗口。 裁剪通常是对用户坐标系中窗口边界进行裁剪,然后 把窗口内的部分映射到视区中,也可以首先将用户坐标 系的图形映射到设备坐标系或规范化设备坐标系中,然 后用视区边界裁剪。 下面假定裁剪是针对用户坐标系中窗口边界进行的, 裁剪完成后

2、,再把窗口内图形映射到视区。所以裁剪的 目的是显示可见点和可见部分,删除视区外的部分。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 2 6.1 6.1 窗口区和视图区窗口区和视图区 6.1.1 6.1.1 坐标系坐标系 1.1.用户坐标系用户坐标系( (World Coordinates)World Coordinates) 又称为世界坐标系、完全坐标系等,它可以是用 户用来定义设计对象的各种标准坐标系,例直角坐标、 极坐标、球坐标、对数坐标等。用户坐标系所拥有的 区域范围从理论上说是连续的、无限的。 2.2.观察坐标系观察坐标系( (V Viewing Coordinates)

3、 Coordinates) 在用户坐标中设置观察坐标系,在观察坐标系中定 义一个观察窗口。观察坐标系用来任意设置矩形窗口 的方向。一旦建立了观察参考系,就可以将用户坐标 系下的描述变换到观察坐标系下。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 3 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 4 3.3.规范化设备坐标系规范化设备坐标系( (Normalized Device Coordinates)Normalized Device Coordinates) 在规范化坐标系下(取值范围从0到1)定义视区,将 观察坐标系下的场景描述映射到规范坐标系下。 2021-6

4、-27计算机图形学演示稿 纪玉波制作 (C) 5 4.4.设备坐标系设备坐标系( (Device Coordinates)Device Coordinates) 图形输出时需要一定的设备,如绘图仪、显示器 等,使用的是设备坐标系。设备坐标系一般为二维坐 标,如屏幕坐标。它的范围有限,单位一般为整数。 设备坐标一般采用无量刚方式,可以转换为有量刚坐 标。一旦场景变换到规范化坐标系下的单位正方形中, 以后该单位面积只需要简单地映射到具体输出设备的 显示区。给出合适的设备驱动程序,就可以使用不同 的输出设备。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 6 6.1.2 6.1.2 窗口

5、区和视图区窗口区和视图区 用户可以在用户坐标系中指定感兴趣的任意区域,把这 部分区域内的图形输出到屏幕上,这个指定区域称为窗口区。 窗口区一般是矩形区域,可以用左下角和右上角两点坐标来 定义其大小和位置。定义窗口的目的是要选取图形中需要观 察的那一部分图形。在计算机图形学术语中,窗口最初是指 要观察的图形区域,但是目前窗口也用于窗口管理系统。在 本章中,我们将窗口理解为用户坐标系中要显示的区域。 图形设备上用来输出图形的最大区域称之为屏幕域,它 是有限的整数域,大小随具体设备而异。任何小于或等于屏 幕域的区域都可定义为视图区。视图区由用户在屏幕域中用 设备坐标定义,一般也定义成矩形,由其左下角

6、和右上角两 点坐标来定义。所以,用户可以利用窗口来选择需要观察那 一部分图形,而利用视图区来指定这一部分图形在屏幕上显 示的位置。标准的窗口区和视图区一般都是矩形,其各边分 别与坐标轴平行。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 7 用户定义的图形从窗口区到视图区的输出过程如下: 从应用程序得到图形的用户坐标(WC-World Coordinates)对窗口区进行裁剪(WC)窗口区到视图 区 的 规 格 化 变 换 ( N D C - N o r m a l i z e d D e v i c e Coordinate)视图区从规格化设备系到设备坐标系的 变换(DC-Dev

7、ice Coordinate)在图形设备上输出图形。 下图是从用户坐标系取图形在设备坐标系下显示的示 意图: 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 8 6.1.3 6.1.3 窗口区和视图区之间的坐标变换窗口区和视图区之间的坐标变换 由于窗口和视图是在不同坐标系中定义的,因此, 在把窗口中图形信息转换到视图区之前,必须进行坐标 变换,即把用户坐标系的坐标值转化为设备坐标系的坐 标值。 设在用户坐标系下,矩形窗口左下角点坐标为 (Wxl,Wyb), 右上角点坐标为(Wxr,Wyt)。屏幕中视图区的 两个角点在设备坐标系下分别为(Vxl,Vyb)和(Vxr,Vyt)。 则在窗口

8、中的点(xw,yw)对应视图区中的点(xv, yv), 其变换公式为: ybybw ybyt ybyt v xlxlw xlxr xlxr v VWy WW VV y VWx WW VV x )( )( 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 9 下图为示图: 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 10 记: xlxr xlxr WW VV a xl xlxr xlxr xl W WW VV Vb ybyt ybyt WW VV c yb ybyt ybyt yb W WW VV Vd 公式可以化简为: dcyy baxx wv wv 2021-6-27计

9、算机图形学演示稿 纪玉波制作 (C) 11 写成矩阵形式为: 1 00 00 11 db c a YXyx wwvv 上述变换是二维变换中比例变换和平移变换的组 合变换。通过变换,可以实现将用户坐标系中窗口 区中任意一点转换成设备坐标系中视图区中一点, 从而可以把实际图形转换到具体输出设备的显示区。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 12 6.2 6.2 直线段裁剪直线段裁剪 直线段是组成其它图形的基础,其它任何图形, 一般都能用不同直线段或近似为直线段组合形成。直 线段裁剪是其他裁剪的基础,下面介绍几种基本的线 段裁剪方法。 6.2.1 6.2.1 点的裁剪点的裁剪

10、裁剪算法中最基本的也是最简单的是点的裁剪。设裁 剪窗口是一个标准矩形,窗口左下角点坐标为(Wxl,Wyb), 右上角点坐标为(Wxr,Wyt),若点P(x,y)满足下列不等式: WxlxWxr WybyWyt 则该点在窗口内,其中等号表示点位于窗口边界上。这 样的点属于可见点,应予保留,如果这四个不等式中有 任何一个不满足,则该点在窗口外,应被裁剪掉。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 13 6.2.2 6.2.2 编码裁剪算法编码裁剪算法 这是一个最早最流行的线段裁剪算法,是由Cohen和 Sutherland提出的,也称为Cohen-Sutherland线段裁 剪算

11、法。该算法通过初始测试来减少需要计算的交点 数目,从而加快线段裁剪算法的速度。 1. 1. 线段同窗口的关系线段同窗口的关系 在许多情形中,大多 数线段不是在裁剪窗口 之内就是在裁剪窗口之 外,因此需要迅速决定 是否接受或抛弃线段。 对于任意一条直线段, 它相对于裁剪窗口的可 能关系如右图所示。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 14 (1)若一线段两端点均位于裁剪窗口内,则该线段也位 于窗口内且可见,如图中的线段P1P2; (2)当线段两端点均在窗口之外,且位于裁剪窗口的同 一侧时,该线段必全部在窗口之外,从而是不可见的,如 图中的线段P3P4。 (3)但当线段两端点

12、在窗口之外,而不位于裁剪窗口的 同一侧时,该线段可能完全在窗口的外面,如图中的线段 P9P10,也可能不全部在窗口的外面,如图中的线段P7P8。 (4)若线段的两端点一个位于窗口之内,一个位于窗口 之外,则该线段部分可见,如图中的线段P5P6。 对于上述(1)(2)两种情况,可以通过判断一线段两端点 位置直接决定是否接受或抛弃线段。而对于(3)(4)两种情 况,则需要进一步计算线段与裁剪窗口的交点,得到需要 保留的部分线段。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 15 2 2 编码方法编码方法 根据上面的分析,把包含窗口的平面区域沿窗 口的四条边线分成九个区域,如下图所示。

13、用四位 二进制码来标识线段的端点位于九个区域中的哪一 个区域内。四位编码规则如下: 第一位置1: 线段端点位于窗口左侧; 第二位置1: 线段端点位于窗口右侧; 第三位置1: 线段端点位于窗口下面; 第四位置1: 线段端点位于窗口上面; 否则相应位置零。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 16 由编码规则可知,若线段完全在裁剪窗口内,则线 段两端点编码均为0000。当线段两端点均在窗口之外, 且位于裁剪窗口的同一侧时,则两端点编码必有一位 同时为1。 一旦给所有的线段端点建立了编码,就可以快速 判断哪条线段完全在裁剪窗口内,哪条线段完全在窗 口外。其方法如下: (1)线段

14、两端点的编码逐位取逻辑“或”,若结果 为零,则该线段必为完全可见,应保留。 (2)线段两端点的编码逐位取逻辑“与”,若结果 非零,则该线段必为完全不可见,因而可立即抛弃。 通过上面两步判定得知完全可见线段和完全不可见 线段后,剩下线段两端点编码逻辑“或”不为零,或 两端点编码的逻辑“与”均为零,这些线段可能部分 可见,也可能完全不可见。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 17 对于不能判定完全可见和完全不可见的线段,需 要对线段进行再分割,即找到与窗口一个边框的交点, 根据交点位置,也赋予4位代码,并对分割后的线段进 行检查,或者接受,或者舍弃,或者再次进行分割。 重复

15、这一过程,直到全部线段均被舍弃或被接受为止。 线段与窗口边求交次序的选择是任意的。但是无论哪 种次序,对于有些线段的裁剪,可能不得不重复4次, 计算与4条窗口边的交点。 下面介绍交点的求法。设线段两端点坐标分别为 P1(x1,y1)和P2(x2,y2),通过P1(x1,y1)和P2(x2,y2)两点 的直线方程为: 11) (yxxmy或 11) ( 1 xyy m x 其中 12 12 xx yy m 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 18 利用两点式直线方程,线段与窗口四条边线的交点 坐标,可分别确定如下: 同窗口左边线的交点: 11) (yxWmy Wx xl x

16、l 同窗口右边线的交点: 11) (yxWmy Wx rl rl 同窗口上边线的交点: 11) ( 1 xyW m x Wy yt yt 同窗口下边线的交点: 11) ( 1 xyW m x Wy yb yb 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 19 在上面的求交点计算过程中,需要考虑对某些特殊情 形的处理。若直线的斜率m为无穷大,则直线平行于窗口 的左边和右边,故仅需检查直线与上、下两边的交点。同 样,若直线斜率为零,则它平行于窗口的上、下两边,这 时仅需检查直线与左、右两边的交点。 6.2.3. 6.2.3. 参数化线段裁剪算法参数化线段裁剪算法 更快的线段裁剪算法基

17、于线段的参数化方程的分析, 它是由粱友栋和Barsky提出的,也称为粱友栋-Barsky线 段裁剪算法。 设线段两端点坐标分别为P1(x1,y1)和P2(x2,y2),则其参 数化直线方程可写成下列形式: yuyyyuyy xuxxxuxx 1121 1121 )( )( 0u1 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 20 坐标(x,y)表示直线上两端点之间的任一点。当u=0时,得 点P1,当u=1时,得点P2。线段的裁剪条件可以由下面的不 等式表示: Wxlx1uxWxr Wyby1uyWyt 这四个不等式可以表示为: upkqk k=1,2,3,4 其中,参数p,q定义

18、为: p1-x, q1x1Wxl p2x, q2Wxrx1 p3-y, q3y1Wyb p4y, q4Wyty1 下标k=1,2,3,4分别对应裁剪窗口的左、右、下、上四条 边界线。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 21 如果线段平行于裁剪窗口的某两边界,则必有相应的 pk0,如果还满足qk0,则线段的端点位于窗口外部, 即线段在窗口外,应该舍弃。如果qk0,线段在窗口内。 当pk0时,直线是从裁剪窗口第k条边界线的外部延 伸到内部。例如当p10时,则x2x1, 直线必然从裁剪窗 口的左边界线的外部进入内部,如下图中的线段P1P2。当 pk0时,直线是从裁剪窗口第k条

19、边界线的内部延伸到外 部。例如p20时,则x2x1, 直线必然从裁剪窗口的右边 界线的内部进入外部,如下图中的线段P3P4。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 22 当pk不等于零时,可以计算出线段与第k条裁剪窗 口边界线的交点参数: k k k p q r 根据定义,对于每条线段,pk中必有两个小于零,而另 两个大于零。对于小于零的pk,直线同第k条裁剪窗口 边线是从外到内相遇的,此时如果线段同第k条裁剪窗 口边界线有交点的话,是参数u从0变大时遇到的,这 时计算出相应的rk值,取0和各个rk值之中的最大值记 为u1。与此相反,对于大于零的pk,计算出相应的rk值,

20、取1和各个rk值之中的最小值记为u2。两个参数u1和u2定 义了在裁剪窗口内的线段部分。如果u1u2,则线段完 全落在裁剪窗口之外,应被舍弃。否则被裁剪线段可 见部分的端点由参数u1和u2计算出来。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 23 梁友栋线的裁剪算法例子 设:Wxl=2; Wxr=4; Wyb=2; Wyt=4 被裁剪线段的两端点:(1,2),(5,3) 计算:x=5-1=4 y=3-2=1 p1= -4,q1= -1 p2=4, q2=3 p3= -1,q3= 0 p4=1, q4=2 4 1 4 1 1 r 4 3 2 r 0 3 r 2 4 r 2021-

21、6-27计算机图形学演示稿 纪玉波制作 (C) 24 p1,p3小于0,决定u1,取0与r1和r3中的大者,u1=1/4 p2,p4大于0,决定u2,取1与r2和r4中的小者,u2=3/4 两交点由u1,u2决定: 计算:(1) 24 4 1 1x 4 1 21 4 1 2y (2) 44 4 3 1x 4 3 21 4 3 2y 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 25 通常粱友栋-Barsky算法比Cohen-Sutherland算法 更有效,因为需要计算的交点数目减少了。一次计算 就可以确定出线段的可见性及可见部分。这两种线段 裁剪算法都可以扩展为三维线段裁剪算法。

22、 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 26 6.3 6.3 多边形裁剪多边形裁剪 尽管多边形是由线段组成的,但却不能简单地将线 段裁剪方法用于多边形裁剪。这是因为,在线段裁剪 中,是把一条线段的两个端点孤立地加以考虑的,而 多边形是由一些有序的线段组成的,裁剪后的多边形 仍应保持原多边形各边的连接顺序。还有,一个完整 的封闭多边形经裁剪后一般不再是封闭的,需要用裁 剪窗口边界适当部分来形成一个或多个封闭区域。所 以,多边形裁剪后的输出应该是定义裁剪后的多边形 边界的顶点序列。下图示出了一个多边形裁剪的例子。 图(a)中是矩形裁剪窗口和需要裁剪的三角形,图(b) 中是不正确

23、的非封闭裁剪结果,图(c)是正确的封闭裁 剪结果。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 27 多边形裁剪方法很多,下面介绍两种常用的多边形裁剪 算法。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 28 6.3.1 6.3.1 逐边裁剪法逐边裁剪法 这个算法是由Sutherland和Hodgman提出来的, 也称 为Sutherland-Hoeman多边形裁剪方法。对于矩形裁剪窗 口的一条边界线,如果称窗口区域所在的一侧为内侧, 另一侧为外侧,则方法的具体做法是:每次用裁剪窗口 的一条边界对要裁剪的多边形进行裁剪,把落在此边界 外侧的多边形部分去掉,只保留内侧

24、部分,形成一个新 的多边形,并把它作为下一次待裁剪的多边形。若依次 用裁剪窗口的4条边界对要裁剪的原始多边形进行裁剪, 则最后形成了裁剪出来的多边形。下图说明了这个过程。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 29 在剪取过程中,实际是多边形的每一边与窗口的一边界进行 比较,从而确定它们的位置关系。多边形是用顶点表示的,相 邻的一对顶点构成一条边。具体实现时首先把待裁剪多边形各 顶点按照一定方向有次序地组成顶点序列。然后用窗口的一条 边界裁剪多边形,产生新的顶点序列。 当多边形顶点序列中一条边的起点和终点被一窗口边界裁剪 时,会遇到边与窗口的四种情况之一,做如下处理: 如果

25、起点在窗口边界外侧而终点在窗口边界内侧,则将 多边形的该边与窗口边界的交点和终点都加到输出顶点表中; 如果两顶点都在窗口边界内侧,则只有终点加入输出顶 点表中; 如果起点在窗口边界内侧而终点在外侧,则只将与窗口 边界的交点加到输出顶点表中; 如果两个点都在窗口边界外侧,输出表中不增加任何点。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 30 边与窗口的四种可能的关系如下图所示: 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 31 按照上述处理方法,窗口的一条裁剪边界处理完所有 顶点后,其输出是一个新的封闭多边形顶点序列表,用于 窗口的下一条边界继续裁剪。所有的窗口边界

26、都裁剪完后, 得到的是裁剪后的多边形顶点序列,它自然也是封闭的。 要实现上述算法还涉及到点处于窗口边界内外侧判别和求 多边形的边和窗口边界的交点。前一节线段裁剪中所述的 判别和求交方法都是可用的,下面再各介绍一种方法。 二维多边形裁剪中,用两矢量叉积的方法判别点处于 窗口边界内外侧十分简单。设在右手坐标系中,裁剪窗口 位于XY平面上,平面的法线与Z轴方向相同,所以只有z 分量。假定裁剪窗口各边取顺时针方向,记一边界起点为 W1,终点为W2。多边形的一顶点P与W1和W2可构成平面上 的两矢量 和 ,作两矢量的叉积,如下图所示,也只 有z分量不为零: 21W W PW1 2021-6-27计算机图

27、形学演示稿 纪玉波制作 (C) 32 kji yyxx yyxx WWWW WPWP WWPW 1212 11 211 00 上式中的下标x,y分别表示点的x,y坐标分量。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 33 记: yyxx yyxx WWWW WPWP C 1212 11 当P点位于窗口边界的右面时为内侧,其矢量叉积同Z轴 的正方向,此时C0,点可见。当点位于窗口边界的 左面时为外侧,其矢量叉积同Z轴方向相反,此时C0, 点不可见。当点位于窗口边界上时作为可见,此时C=0。 如是通过多边形顶点和窗口边界端点的坐标值,用上 式计算C值可判断出点的可见性。 线段与窗口

28、边界的交点可以使用直线的参数方程求 取。线段的参数方程为: )( )( 121 121 yyuyy xxuxx 0u1 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 34 记被裁剪线段的两个端点为P1(x1,y1),P2(x2,y2), 窗 口边界线段的两端点为W1(W1x,W1y), W2(W2x,W2y)。并记两 线段的参数分别为u1,u2。如果两线段相交,则交点处的 参数值可以由下面方程求出: )()( )()( 12211211 12211211 yyy xxx WWuWyyuy WWuWxxux 解方程组可得: 1221 1221 2111 2111 1 yyWW xxW

29、W WWyW WWxW u yy xx yyy xxx 1221 1221 1211 1211 2 yyWW xxWW yyyW xxxW u yy xx y x 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 35 当分母0 1221 1221 yyWW xxWW yy xx 时,u1和u2有相同的唯一解。 当解在0,1区间时,将u1和u2代入方程中得到交点坐标。 否则两线段不相交。分母为零时两线段平行。 算法描述如下: 依次取窗口的一边作为裁剪边,各窗口边都处理完后转; 用此裁剪边对多边形的各条边依次进行裁剪; 按被裁剪边相对于裁剪边相交、重合、完全可见,完全不 可见分情况处理;

30、 多边形全部边裁剪完否?完转,否则转; 结束。 由于在这一剪取方法中,被剪取多边形的每一边是依次处 理的,故只需作少许变动,用同一子程序可以处理多边形的 每一边。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 36 凸多边形可以用Sutherland-Hodgeman算法获得正 确的裁剪结果,但是对凹多边形的裁剪,可能出现如 下图所示多余的连线。这种情况在裁剪后的多边形有 两个或者多个分离部分的时候出现。因为只有一个输 出顶点表,所以表中最后一个顶点总是连着第一个顶 点。如下面所述的另一算法可以消除这一问题。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 37 6.3.

31、2 6.3.2 双边裁剪法双边裁剪法 此算法是由Weiler和Atherton提出来的。算法的基本做 法是:有时沿着多边形边的方向来处理顶点,有时沿着窗 口的边界方向来处理,从而避免产生多余的连线。设被裁 剪多边形和裁剪窗口都按顺时针确定排列方向,因此,沿 多边形的一条边前进,其右边为多边形的内部。算法首先 沿多边形的任一点出发,跟踪检测多边形的每一条线段, 当线段与裁剪窗口边界相交时: 如果线段起点在窗口外部而终点在窗口内部,则求出 交点,输出线段可见部分,继续沿多边形方向往下处理; 如果线段起点在窗口内部而终点在窗口外部,则求出 交点,输出线段可见部分。从此交点开始,沿着窗口边界 方向往前

32、检测,找到一个多边形与窗口边界的新交点后, 输出由前交点到此新交点之间窗口边界上的线段; 返回到前交点,再沿着多边形方向往下处理,直到处 理完多边形的每一条边,回到起点为止。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 38 下图说明了双边裁剪算法的执行过程。 Weiler-Atherton算法可适用于任何凸的或凹的多边形裁 剪,不会产生多余连线。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 39 6.4 6.4 其它类型的图形裁剪其它类型的图形裁剪 6.4.1 6.4.1 非矩形裁剪窗口的线段裁剪非矩形裁剪窗口的线段裁剪 在某些应用中,需要用任意形状的多边形对线段

33、裁剪。 对凸多边形裁剪窗口,可以修改粱友栋-Barsky的参数化 线段裁剪方法,使参数化方程适合裁剪区域的边界,按 照裁剪多边形的坐标范围处理线段。这就成为另一种称 之为Cyrus-Beck线段裁剪方法的算法。而前面介绍的两 种多边形裁剪方法都适应于任意凸多边形裁剪窗口。 圆或其他曲线边界也可以用作为裁剪窗口,但用的很 少。用这些区域的裁剪算法速度更慢,因为它的求交计 算涉及非线性曲线方程。加快速度的一个方法是可以首 先使用曲线裁剪区域的外接矩形裁剪,完全落在外接矩 形之外的裁剪对象被舍弃。如果是用圆作为窗口对线段 裁剪,可以通过计算圆心到直线端点的距离来识别出内 部线段。其他线段通过解联立方

34、程来计算交点。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 40 6.4.2 6.4.2 曲线的裁剪曲线的裁剪 曲线的裁剪过程涉及到非线性方程,需要更多的 处理。圆或者其它曲线对象的外接矩形可以用来首先 测试是否与矩形裁剪窗口有重叠。如果曲线对象的外 接矩形完全落在裁剪窗口内,则曲线对象完全可见, 如果曲线对象的外接矩形完全落在裁剪窗口外,则曲 线对象完全不可见。两种情况都不满足时,一般需要 解直线和曲线的联立方程求交点。 处理曲线对象的另一有效方法是把它们近似为直 线段,然后使用线段或多边形的裁剪算法。曲线绘制 时通常也使用直线段逼近的方法,由于逼近时总是将 线段取的很短,为了

35、减少计算时间,裁剪时可以不计 算交点,只要线段的端点中至少有一个在裁剪窗口外, 就舍弃该线段,从而提高裁剪效率。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 41 .3字符的裁剪字符的裁剪 字符既可由单个的线段或笔划构成,也可以用点阵来 表示。由裁剪精度要求不同,字符裁剪也采用不同的方法。 精确裁剪是对单个字符进行裁剪。此时笔划式字符可 看作是短直线段的集合,用裁剪线段的方法进行裁剪。点 阵式字符必须将字符方框中每一象素同裁剪窗口进行比较, 以确定它位于窗口内还是窗口外。若位于窗口内,该象素 被激活,否则不予考虑。 如果把每个字符看作是不可分割的整体,那么对每一

36、个字符串就可用逐字裁剪的方法。这可将字符方框同裁剪 窗口进行比较,若整个方框位于窗口内,则显示相应字符, 否则不予显示。 最后一种处理方法是把一个字符串作为不可分割的整 体来处理,或者全部显示,或者全部不显示。将字符串用 一个字符串框封闭起来,若整个方框位于窗口内,则显示 整串字符,否则整串字符就不显示。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 42 下图示出了这几种裁剪情况。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 43 6.5 6.5 三维裁剪三维裁剪 6.5.1 6.5.1 三维三维裁剪裁剪空间空间 三维图形的显示需要投影到二维投影面上实现。但 在投影

37、之前应对三维图形进行裁剪,把图形中不关心 的部分去掉,留下感兴趣的部分投影到投影面上显示 出来。这就需要在用户坐标系中指定一个观察空间, 将这个观察空间以外的图形裁剪掉,只对落在这个空 间内的图形部分作投影变换并予以显示。 观察空间的确定取决于投影类型、投影平面、和投 影中心的位置。对于透视投影,观察空间是顶点在投 影中心、其棱边穿过投影平面四个角点、没有底面的 四棱锥,如下图(a)所示。而对于平行投影,观察空间 是一个四边平行于投影方向、两端没有底面的长型方 管如下图(b)所示。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 44 2021-6-27计算机图形学演示稿 纪玉波制作

38、 (C) 45 在大多数场合,希望观察空间是有限的。通常 使用平行于投影平面的一截面将无限的观察空间截 成有限的观察空间。截面的位置由从投影中心沿投 影平面法向的距离z=E确定。对于透视投影,投影平 面与截面之间的观察空间是一个正四棱台,如上图(c) 所示。对于平行投影,投影平面与截面之间的观察 空间是一个正四棱柱,如上图(d)所示。有限的观察 空间又叫裁剪空间。裁剪空间具有六个边界平面, 即左侧面、右侧面、上面、下面、前面和后面。这 六个边界平面把整个三维空间分割成裁剪空间内部 和裁剪空间外部两部分。把落在裁剪空间内的图形 从整个空间的图形中分离出来,这就是三维裁剪所 要做的工作。 2021-6-27计算机图形学演示稿 纪玉波制作 (C) 46 假设投影平面为正方形,边长2f,到坐标原点的距 离是d,则平行投影观察空间正四棱柱的左、右、上、 下、前、后六个边界平面的平面方程分别是: Ez dz fy fy fx fx 对于透视投 影,观察空 间正四棱台 的六个边界 平面的平面 方程分别是: Ez dz zy zy zx zx d f d f d f d f 三维裁剪方法很多,我们在二维图形裁剪中介绍的编码 裁剪方法和参数化裁剪方都可以推广应用到三维图形裁 剪。下面介绍三维编码裁剪方法。 2021-6-27计算机图形学演示稿

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论