《第6章2二维观察及裁剪.ppt》由会员分享,可在线阅读,更多相关《第6章2二维观察及裁剪.ppt(35页珍藏版)》请在优知文库上搜索。
1、6.4 两维观察两维观察6.4.1 基本概念基本概念 在计算机图形学中,将在用户坐标系中需要进行观察和处理的一个坐标区域称为窗口窗口(Window)将窗口映射到显示设备上的坐标区域称为视区视区(Viewport)要将窗口内的图形在视区中显示出来,必须经过将窗口到视区的变换(Window-Viewport Transformation)处理,这种变换就是观察变换观察变换)。XYwxlXYwybwxrwyt窗口vxrvybvyt视区(a)用户坐标系中的窗口(b)屏幕坐标系中的视区vxlXY窗口图6-17 用户坐标系中旋转的窗口1x用户y用户xNDCyNDC窗口视区y观察x观察1(a)观察坐标系(b
2、)规格化设备坐标系观察坐标系观察坐标系(View Coordinate)和规格化设备坐标系和规格化设备坐标系(Normalized Device Coordinate)l观察坐标系观察坐标系是依据窗口的方向和形状在用户坐标平面中定义的直角坐标系。l规格化设备坐标系规格化设备坐标系也是直角坐标系,它是将二维的设备坐标系规格化到(0.0,0.0)到(1.0,1.0)的坐标范围内形成的。引入了观察坐标系和规格化设备坐标系后,观察变换分为如下图所示的几个步骤,通常称为二维观察流程二维观察流程。观 察 坐标 系 下对 窗 口进 行 裁剪窗口到视区(规范化设备坐标系中定义)的变换视图区从规范化坐标系到设备
3、坐标系的变换在图形设备上输出DC用 户 坐标 系 到观 察 坐标 系 间的变换应用程序到图形的用户坐标图6-19 两维观察流程NDCVCWCVC 变焦距效果变焦距效果图6-20 变焦距效果(窗口变、视区不变)(a)原图及变化的窗口(b)与窗口对应的视区1(c)与窗口对应的视区2(d)与窗口对应的视区3112323 整体放缩效果整体放缩效果(a)原图及窗口(b)视区1图6-21 整体放缩效果(窗口不变、视区变)(c)视区2(d)视区3 漫游效果漫游效果 6.4.3 窗口到视区的变换窗口到视区的变换XYwxlXYwybwxrwyt窗口vxlvybvyt视区图6-23 窗口到视区的变换(a)窗口中的
4、点(b)视区中的点(xw,yw)(xv,yv)vxr要将窗口内的点(xw,yw)映射到相对应的视区内的点(xv,yv)需进行以下步骤:(1)将窗口左下角点移至用户系统系的坐标原点(2)针对原点进行比例变换(3)进行反平移6.5 裁剪裁剪 在二维观察中,需要在观察坐标系下对窗口进行裁裁剪剪,即只保留窗口内的那部分图形,去掉窗口外的图形。假设假设窗口是标准矩形,即边与坐标轴平行的矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr)四条边描述。6.5.1 点的裁剪点的裁剪wytywybwxrxwxl且,(wxl,wyb)(wxr,wyt)P6.5.2 直线段的裁剪直线段的裁
5、剪假定假定直线段用p1(x1,y1)p2(x2,y2)表示。直线段和剪裁窗口的可能关系:l完全落在窗口内l完全落在窗口外l与窗口边界相交 窗口图6-24 直线段与窗口的关系ABCDEFHGIJ 实交点实交点是直线段与窗口矩形边界的交点。虚交点虚交点则是直线段与窗口矩形边界延长线或直线段的延长线与窗口矩形边界的交点。窗口图6-25 实交点与虚交点ABCDEFHGIJ虚交点实交点实交点实交点虚交点虚交点1.Cohen-Sutherland算法算法基本思想基本思想:对每条直线段p1(x1,y1)p2(x2,y2)分三种情况处理:(1)直线段完全可见,“简取”之。(2)直线段完全不可见,“简弃”之。(
6、3)直线段既不满足“简取”的条件,也不满足“简弃”的条件,需要对直线段按交点进行分段,分段后重复上述处理。编码编码:对于任一端点(x,y),根据其坐标所在的区域,赋予一个4位的二进制码D3D2D1D0。(上下右左)编码规则如下:编码规则如下:若若xwxr,则则D1=1,否则否则D1=0;若若ywyt,则则D3=1,否则否则D3=0。裁剪裁剪裁剪一条线段时,先求出端点p1和p2的编码code1和code2,然后:(1)若code1|code2=0,对直线段应简取之。(2)若code1&code20,对直线段可简弃之。(3)若上述两条件均不成立。则需求出直线段与窗口边界的交点。在交点处把线段一分为
7、二,其中必有一段完全在窗口外,可以弃之。再对另一段重复进行上述处理,直到该线段完全被舍弃或者找到位于窗口内的一段线段为止。求交求交:假定直线的端点坐标为(x1,y1)和(x2,y2)左、右边界交点的计算:上、下边界交点的计算:窗口ABCDEFHGIJ虚交点实交点实交点实交点虚交点虚交点算法的步骤算法的步骤:(1)输入直线段的两端点坐标:p1(x1,y1)、p2(x2,y2),以及窗口的四条边界坐标:wyt、wyb、wxl和wxr。(2)对p1、p2进行编码:点p1的编码为code1,点p2的编码为code2。(3)若code1|code2=0,对直线段应简取之,转(6);否则,若code1&c
8、ode20,对直线段可简弃之,转(7);当上述两条均不满足时,进行步骤(4)。(4)确保p1在窗口外部:若p1在窗口内,则交换p1和p2的坐标值和编码。(5)按左、右、上、下的顺序求出直线段与窗口边界的交点按左、右、上、下的顺序求出直线段与窗口边界的交点,并用该交点的坐标值替换p1的坐标值。也即在交点也即在交点s处把线段一分为二,处把线段一分为二,并去掉并去掉p1s这一段。这一段。考虑到p1是窗口外的一点,因此可以去掉p1s。转(2)。(6)用直线扫描转换算法画出当前的直线段p1p2。(7)算法结束。例如例如:特点特点:P1P2P3P400000100010110010001101001101
9、0000010图6-27 直线段p1p2的编码裁剪2.中点分割算法中点分割算法基本思想基本思想:当对直线段不能简取也不能简弃时,简单地把线段等分为二段,对两段重复上述测试处理,直至每条线段完全在窗口内或完全在窗口外。中点分割算法的核心思想核心思想是通过二分逼近来确定直线段与窗口的交点。p1p2p3p4p5p6p7与Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况,对前两种情况,进行一样的处理;对于第三种情况,用中点分割的方法求出线段与窗口的交点。A、B分别为距P0、P1最近的可见点,Pm为P0P1中点。特点:以求直线的中点来代替求两直线的交点,只
10、需进行整数的简单加法和运算器右移实现除法,避免做大量的乘除法 P0P1PmAB从P0出发找距离P0最近可见点采用中点分割方法先求出先求出P P0 0P P1 1的中点的中点P Pm m,若若P P0 0P Pm m不是显然不可见的,并且不是显然不可见的,并且P P0 0P P1 1在窗口中有可见部分,在窗口中有可见部分,则距则距P P0 0最近的可见点一定落在最近的可见点一定落在P P0 0P Pm m上,所以用上,所以用P P0 0P Pm m代替代替P P0 0P P1 1;否则取否则取P Pm mP P1 1代替代替P P0 0P P1 1。再对新的再对新的P P0 0P P1 1求中点
11、求中点P Pm m。重复上述过程,直到。重复上述过程,直到P Pm mP P1 1长度小长度小于给定的控制常数为止,此时于给定的控制常数为止,此时P Pm m收敛于交点。收敛于交点。从P1出发找距离P1最近可见点采用上面类似方法。P0P1PmAB6.5.3 多边形的裁剪多边形的裁剪问题的提出:(a)裁剪前(b)直接采用直线段裁剪的结果(c)正确的裁剪结果多边形的裁剪比直线的裁剪要复杂多边形的裁剪比直线的裁剪要复杂:1)边界不再封闭,需要用窗口边界的恰当部分来封闭它,如何确定其边界?算法实施策略算法实施策略:为窗口各边界裁剪的多边形存储输入与输出顶点表。在窗口的一条裁剪边界处理完所有顶点后,其输
12、出顶点表将用窗口的下一条边界继续裁剪。窗口的一条边以及延长线构成的裁剪线把平面分为两个区域,包含有窗口区域的一个域称为可见侧可见侧;不包含窗口区域的域为不可见侧不可见侧。1.Sutherland-Hodgeman多边形裁剪多边形裁剪沿着多边形依次处理顶点会遇到四种情况:SPSPSPSPII(a)输出I、P(b)输出P(c)输出I可见侧(d)不输出可见侧可见侧可见侧逐边裁剪法逐边裁剪法,基本思想,基本思想一次用窗口的一条边裁剪多边形输入:ABCDEFGHABCDEFGH输出:12DEFGHA12(a)用左边界裁剪输出:34D56FGHA1ADEFGH 输入:12DEFGHA12(b)用下边界裁剪
13、3456输入:34D56FGHA1ADFGH1(c)用右边界裁剪3456输出:4D5678GHA1378ADGH1(d)用上边界裁剪345678输入:4D5678GHA13输出:D56789IHJK349IJK缺点:S-H法可以处理凸多边形和凹多边形的裁剪,但只能对裁剪后仍为一个连通图的凹多边形产生正确的裁剪效果。对裁剪后产生两个或多个分离部分的凹多边形会产生一些多余的边。AEDCBAEDCBV1V2V3V4FF输出:A-V1-V4-D-E-V3-V2-A输入:A-B-C-D-E-F-A2.Weiler-Atherton多边形裁剪多边形裁剪假定假定按顺时针方向处理顶点,且将用户多边形定义为Ps
14、,窗口矩形为Pw。算法从Ps的任一点出发,跟踪检测Ps的每一条边,当Ps与Pw相交时(实交点),按如下规则处理:(1)若是由不可见侧进入可见侧,则输出可见直线段,转(3);(2)若是由可见侧进入不可见侧,则从当前交点开始,沿窗口边界顺时针检测Pw的边,即用窗口的有效边界去裁剪Ps的边,找到Ps与Pw最靠近当前交点的另一交点,输出可见直线段和由当前交点到另一交点之间窗口边界上的线段,然后返回处理的当前交点;(3)沿着Ps处理各条边,直到处理完Ps的每一条边,回到起点为止。下图示了Weiler-Atherton算法裁剪凹多边形的过程和结果。ABCDECEV1V2V3V4V1V2V3V4图6-34
15、Weiler-Atherton算法裁剪凹多边形(a)裁剪前(b)Weiler-Atherton算法的裁剪结果返回返回6.5.4 其它裁剪其它裁剪1.曲线边界对象的裁剪曲线边界对象的裁剪 曲线边界对象与矩形窗口和多边形窗口的裁剪 加速方法2.字符裁剪字符裁剪 串精度串精度:将包围字串的外接矩形对窗口作裁剪 字符精度字符精度:将包围字的外接矩形对窗口作裁剪 以及笔画以及笔画 象素精度象素精度:将笔划分解成直线段对窗口作裁剪 待裁剪字符串 串精度裁剪 字符精度裁剪 象素精度裁剪STRINGSTRING2STRING2RINGSTRING2STRINGSTRING23.外部裁剪外部裁剪保留落在裁剪区域外的图形部分、去掉裁剪区域内的所有图形,这种裁剪过程称为外部裁剪外部裁剪,也称空白裁空白裁剪剪。