网站大量收购独家精品文档,联系QQ:2885784924

图形学实验报告七裁剪及消隐:.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
贵州大学实验报告 学院:计算机科学与信息学院 专业:计算机科学与技术 班级: 101 姓名 学号 实验组 7 实验时间 2013.5.16 指导教师 吴云 成绩 实验项目名称 裁剪及消隐 实验目的 掌握常用的裁减及消隐算法:直线、多边形的裁减;消除隐藏面算法:Roberts消隐算法、Z缓冲器算法、扫描线Z缓冲器算法、光线跟踪算法。 实验要求 在VS2010环境下利用C#编程实现裁剪和消隐。 给出代码。 附上结果截图。 实验原理 直线裁减 Cohen-SutherLand算法(编码算法) 算法原理(递归的裁剪过程): 对于每条线段P1P2分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线段P1P2。 (2)若P1P2明显在窗口外,则丢弃该线段。 (3)若线段不满足(1)或(2)的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为快速判断,采用如下编码方法: 由窗口四条边所在直线把二维平面分成9个区域(右图),每个区域赋予一个四位编码:CtCbCrCl(上下右左);直线的端点都按其所处区域赋予相应的区域码,用来标识出端点相对于裁剪矩形边界的位置。 各位编码含义: 上:if yymax,Ct=1,else, 0; 下:if yymax,Cb=1,else, 0; 右:if xxmax,Cr=1,else, 0; 左:if xxmax,Cl=1,else, 0; 对某线段的两个端点的区号进行位与运算,可知这两个端点是否同在视区的上、下、左、右; 如果两端点的编码均为0000,表示直线在窗口内。 如果两端点的编码相与不为0000,表示直线在窗口外。 如果两端点的编码不全为0000,但相与为0000,则该直线部分可见,需计算直线与窗口的交点,确定哪一部分可见。 算法描述: BOOL done,draw;(done表示是否完成,draw表示是否可见) Unsigned char code1,code2;端点1,端点2的编码 While (!done) begin if (判断code1,code2,若为第1种情况) begin done = TRUE; draw = TRUE; end else if (为第2种情况) begin done = TRUE; draw = FALSE; end else if(检查code1,若在窗口内)/*第3种情况*/ begin 交换端点及端点的编码;以左,上,右,下的次序对端点1进行判断及求交;将交点的值赋给端点1; end end 算法分析: 本算法的优点在于简单,易于实现。用编码方法可快速判断线段的完全可见和显然不可见,他可以简单的描述为将直线在窗口左边的部分删去,按左,右,下,上的顺序依次进行,处理之后,剩余部分就是可见的了。在这个算法中求交点是很重要的,他决定了算法的速度。 本算法对于其他形状的窗口是否同样有效就值得讨论了,这也证明了在图形算法中,没有几个是对大多数情况有效的。 特别适用二种情形:大窗口场合;窗口特别小场合(光标拾取图形,光标看作小的裁剪窗口)。 多边形裁减 Sutherland-Hodgema算法 算法原理: 通过对单一边或面的裁剪来实现多边形的裁剪 分割处理策略:将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪。一次用窗口的一条边裁剪多边形。 流水线过程(左上右下):前边的结果是后边的输入。 亦称逐边裁剪算法。 算法的每一次输出(包括中间结果)都是一个多边形的顶点表,且所有顶点均位于相应窗口裁剪边或面的可见一侧。由于多边形的每一条边需要与裁剪边或面分别进行比较,因此只需要讨论单条边和单个裁剪边或面之间可能的位置关系。假设S,P为多边形的两个相邻顶点,且S为该边的起点,P为该边的终点,则变SP与裁剪边或面之间只有4种可能的关系。如下图: 由上可见,每一次将多边形的边与裁剪边或面比较后,输出一个或两个顶点,也可能无输出点。如果SP边完全可见,则输出P点,不必输出起点S,因为顶点是按顺序处理的,S是作为前一边的终点输出的。如果SP边完全不可见,则无输出。如果SP边部分可见,则SP边可能进入或离开裁剪边或面的可见一侧。 如果SP边离开裁剪边或面的可见一侧,则输出SP与裁剪边或面交点。如果SP边进入裁剪边或面的可见一侧,则输出两点,一个为SP与裁剪边或面的交点,一个是P点。 对于多边形的第一个顶点,只需判断其可见性。如果可见,则输出且作为起点S;否则无输出,但还是要作为S保存,以便后续点处理。 对于最后一条边PnP1,其处理方法是:标志第一顶点为F,这样最后一条边则为PnF,可与其他边作相同的处理。 实现方法: 设置二

您可能关注的文档

文档评论(0)

风凰传奇 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档