- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章节二维图形裁剪
北大计算机系多媒体与人机交互 计算机图形学基础 第3章 二维图形裁剪 本章主要内容 3.1 裁剪概述 “取景器”=窗口 点裁剪 点(x, y)在窗口内的充分必要条件是: 问题:对于任何多边形窗口,如何判别? 3.2 线段裁剪 基本思想:对于每条待裁剪的线段P1P2分三种情况处理:①若P1P2完全在窗口内,则显示该线段P1P2,简称“取”之;②若P1P2完全在窗口外,则丢弃该线段,简称“舍”之;③若线段既不满足“取”的条件,也不满足“舍”的条件,则求线段与窗口边界的交点,在交点处把线段分为两段,其中一段完全在窗口外,可舍弃之,然后对另一段重复上述处理。 核心思想:分区编码和线段分割。 每个区域赋予一个四位编码,CtCbCrCl,上下右左; Cohen-Sutherland裁剪算法 如何判定应该与窗口的哪条边求交呢? 编码中对应位为1的边。 计算线段P1(x1,y1)P2(x2,y2)与窗口边界的交点 if(LEFTcode !=0) { x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1);} else if(RIGHTcode !=0) { x=XR; y=y1+(y2-y1)*(XR-x1)/(x2-x1);} else if(BOTTOMcode !=0) { y=YB; x=x1+(x2-x1)*(YB-y1)/(y2-y1);} else if(TOP code !=0) { y=YT; x=x1+(x2-x1)*(YT-y1)/(y2-y1);} 例:Cohen-SutherLand算法过程: 编码算法特点 求交测试顺序固定(左上右下) 最坏情形,线段求交四次。 例:中点算法裁剪过程: 算法过程: 1)输入线段AB的两端点坐标A(x0,y0)、B(x1,y1),以及裁剪窗口的四条边界:yt,yb,xl,xr。 2)对AB编码,A的编码codeA=0001,B的编码为codeB=0110。 3)线段AB裁剪的基本过程: 中点分割裁剪算法特点 对分辩率为2N*2N的显示器,上述二分过程至多进行N次。 主要过程只用到加法和除法运算,适合硬件实现,它可以用左右移位来代替乘除法,这样就大大加快了速度。 线段的参数表示 x=x0+t△x y=y0+t△y 0=t=1 △x=x1-x0 △y=y1-y0 窗口边界的四条边分为两类:始边和终边。 3.始边和终边的确定及交点计算: 令 QL= - △x DL= x0-xL QR= △x DR= xR-x0 QB= - △y DB= y0-yB QT= △y DT= yT-y0 交点为: ti= Di / Qi i=L,R,B,T Qi 0 ti为与始边交点参数 Qi 0 ti为与终边交点参数 Qi =0 Di 0 时,线段不可见 Di 0 时, 分析另一D, 当Qi =0时 若Di 0 时,线段不可见 (如图中AB,有QR=0,DR0) 若Di 0 时, 分析另一D, (如图中的EF就是这种情况,它使QL=0,DL0和QR=0,DR0。这时由于EF和x=xL及x=xR平行,故不必去求出EF和x=xL及x=xR的交点,而让EF和y=yT及y=yB的交点决定直线段上的可见部分。) 3.3 多边形裁剪 错觉:直线段裁剪的组合? 关键:要保持窗口内多边形的边界部分,而且要将窗框的有关部分按一定次序插入多边形的保留边界之间,从而使剪裁后的多边形的边仍然保持封闭状态。 新的问题:1)边界不再封闭,需要用窗口边界的恰当部分来封闭它,如何确定其边界? 多边形裁剪 3.3.1 Sutherland-Hodgman算法 思路:将多边形边界作为一个整体,分而治之。将多边形的各边先相对于窗口的某一条边界进行裁剪,然后将裁剪结果再与另一条边界进行裁剪,如此重复多次,便可得到最终结果。 流水线过程(左上右下):左边的结果是上边的开始。 Sutherland-Hodgman算法 内侧空间与外侧空间 多边形的边与半空间的关系 Sutherland-Hodgman算法 实现方法: ①设置二个表 输入顶点表(向量)—存放被裁剪多边形的顶点p1-pm。 输出顶点表(线性链表)—存放裁剪过程中及结果的顶点 q1-qn。 ②输入顶点表中各顶点要求按一定顺序排列,一般可采用顺时针或逆 时针方向。 ③相对于裁剪窗口的各条边界,按顶点表中的顺序,逐边进行裁剪。 Sutherland-Hodgman算法 裁剪结果的顶点构成:裁剪边内侧
文档评论(0)