- 1、本文档共72页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章隐藏线和隐藏面的消除,天天爱消除隐藏关,怎么消除隐藏,幻想纹章1.7隐藏人物,平安传隐藏章节,魔法与剑初章隐藏英雄,十国千娇隐藏章节,天可汗6章隐藏结局,风之纹章隐藏宝物坐标,平安传隐藏章节115.5
第七章 假定1:垂直投影 本章说明的各种消隐方法都假定构成对象的不同面不能相互贯穿,如图 7.1可见面判断的有效技术 减少求交计算的常用技术: 包围物体投影的边界盒不相交的情况 包围物体投影的边界盒相交的情况 一个好的包围盒要具有两个条件: 包围和充分紧密包围着形体; 生成边界盒的一个较简单的方法(P136): 把内法线方向背向视点的面称为前向面 内法线方向指向视点的面(即外法线方向背离视点)称为后向面 多面体面的顶点排序 设多边形F的顶点为 ,顶点 的坐标为 。(次序如图所示) 如果是一凸多边形,可只取一个三角形计算有向面积 凹多边形的内法线方向,可以计算多边形在oxy平面上投影的有向面积。有向面积sp可如下计算 如果 ,说明其外法线方向与z轴正向的夹角90,则F所在的面为后向面。 如果 ,说明其外法线方向与z轴正向的夹角90,则F所在的面为前向面。 背面剔除 非垂直投影转换成垂直投影 7.2多面体的隐藏线消除 讨论隐藏线消除问题,总假定它们是用线框方式来表示的。在这种方式下多面体用棱来表示。 如果能把各棱上可见和不可见部分的分界点找到,消隐问题也就迎刃而解了。 这些分界点都是多面体的各棱在oxy平面上投影间的交点,如图。 这样,问题就转化成了在oxy平面上求很多直线的交点的计算。 如果消隐对象有N条棱,用两两求交的方法求所有交点的工作量为 。 实际上交点个数远小于 ,如图的多面体有15条边,棱在oxy平面上的投影相互间只有5个交点。 问题在于如何能预先知道它们是不相交的,从而把它们排挤在求交计算之外。(可用7.1中方法求棱边投影的包围盒,剔除后向面技术) 要对物体一个一个来考虑,如考虑体A的显示时, 判断Qi点在多边形内或外 不可见阶ivord 首先对直线段QiQj与所有多边形交点按参数S由小到大排序 确定起点Qi处的不可见阶,就是遮挡他的多边形的个数,即S0处的不可见阶 Si处的不可见阶是:当其为进点时,为Si-1 处的加1;为出点时,Si-1 处的减1 L的可见部分为SiSi+1 ,其中Si的不可见阶为0时 7.3 区域子分算法 这种关系可有以下四种,即 在窗口和每个多边形的关系确定之后,有些窗口内的图形便可显示了。它们属于下列四种情况之一。 对上述四种情况不成立的窗口再一分为四。分得的窗口重复上述的处理。 窗口的边长越分越短,分了若干次后,窗口的边长就和一个象素的宽度一样了, 这时这个窗口对应的象素的颜色可取成最靠近观察者的多边形的颜色, 或和这个窗口相交的多边形颜色的平均值。 7.4 基于多边形的子分算法 目的是尽量减少对窗口划分的次数。 算法思想: 对各多边形在深度方向作初步 的排序 把多边形序列中的第一个多边 形(裁剪多边形)取为裁减窗口。 多边形序列中的其它的多边形 都要被此窗口裁剪。 裁剪结果要建立两个多边形序 列表 确定裁剪多边形(即取为窗口的那个多边形)是否比内部表中的多边形更靠近观察者 如果是则内部表中的其他多边形都被其遮挡,可把该多边形区域填上裁剪多边形的颜色 如果发现内部表中某多边形H比裁剪多边形更靠近观察者, 接着处理外部表中的各多边形,把外部表中的第一多边形作为裁剪窗口,重复上述工作 这一过程要重复到外部表中不再有多边形为止 7.5 Z缓冲器算法和扫描线算法 z缓冲器算法是最简单的消除隐藏面算法之一 基本思想:对屏幕上每一个像素点,找到此像素投影线与所有多边形交点中离观察者最近的点,此点的属性值即为这一屏幕像素点的属性值 z缓冲器是一组存贮单元 其单元个数和屏幕上象素的个数相同 也和帧缓冲器的单元个数相同,它们之间一一对应。 算法 步骤 流程: for(场景中的每一个多边形) { 扫描转换该多边形; for(多边形所覆盖的每一个像素点(x,y)) { 计算多边形在该像素点的深度值z(x,y); if(z(x,y) Z-buf中对应此像素点(x,y)的z值) { 把多边形在(x,y)处的深度值z(x,y)存入Z-buf中的(x,y)处; 把多边形在(x,y)处的亮度值存入f-buf中的(x,y)处; } } } 当所有的多边形都处理完后,帧缓冲器中的内容即为消除隐藏面后的图像 扫描线z缓冲器 --算法 思想 对每个多边形检查它在oxy平面上的投影和当前的扫描是否相交, 若不相交,则不考虑该多边形。 如果相交,则扫描线和多边形边界的交点事实上
文档评论(0)