11、隐藏面的消除[精].ppt

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
11、隐藏面的消除[精]

第十章 隐藏面的消除 三维世界中的物体之间存在遮挡关系。 为了真实表现三维场景,必须体现出这种遮挡关系。 三维物体的三种模型:线框模型,表面模型,实体模型。 线框模型:涉及隐藏线的消隐,十分复杂,本章不讨论。 表面模型:涉及隐藏面的消隐,本章讨论内容 实体模型:只需考虑实体表面的问题,与表面模型相似 基本概念与基本方法 面消隐算法的基本思想:沿着视线方向,寻找物体上的像素,只有离观察点最近的像素被显示。 若以像素为单位逐一判断,效率太低。常用的方法是以面为单位,显示离观察点最近的面。 场景无限,显示窗口有限。只有能落入窗口范围内的物体,才有显示的可能。为了减少计算量,在三维空间中设置一个包围盒,包围盒内的物体能够显示在窗口中,包围盒外的物体不用考虑。 基本概念与基本方法 前面的平面不一定遮挡或完全遮挡后面的平面,这样就要将不被遮挡的部分显示出来。 基本概念与基本方法 每个物体,只有前向面才可能显示出来;后向面绝无显示的可能,后向面是被物体本身所遮挡。 在面消隐时,只需要考虑前向面的相互遮挡;对于后向面,不需要考虑,这可以大大减少计算量。 前向面在数学上的特征是外法向与视线方向成钝角,后向面则是成锐角。 投影规范化 消隐与投影有密切的关系,同样的一组物体,投影的方式不一样,投影与消隐的结果不一样。 为了简化消隐处理,在消隐前将各种投影转化为正射(平行)投影。 投影的规范化 将点p(x,y,z) 投影的结果 (xp,yp),看作是点p’(xp,yp,z)。即将点p的z直接赋予点p’,就完成了投影的规范化。 画家算法 算法的基本思想是:先将场景中的物体按其距观察点的远近进行排序,排序结果存在一张深度优先表中。距观察点远者称其优先级低,放在表头;距观察点近者称其优先级高,放在表尾。按照从表头到表尾的顺序逐个绘制物体,近的物体后画,覆盖了先画的远的物体,产生了正确的遮挡关系。 画家算法 画家算法 用三维包围盒确定能够投影到窗口的空间范围,除去包围盒以外的物体。 每个物体去除后向面,只剩下前向面,每个前向面用多边形顶点表示。 画家算法的关键和难点在于如何对多边形按远近进行排序。 画家算法 每个多边形顶点中,最大的纵坐标z值用zmax表示, 最小的纵坐标n值用zmin表示; 根据每个多边形的zmin对它们进行预排序,并放入优先级表中;这样大部分多边形都是按照远近关系得到排序,但有少量特例例外。 画家算法 为了排除例外,需要逐个判断多边形之间的远近关系。 设P是在优先级表中排列第一的多边形,Q为任意一个其他多边形。 Q与P进行比较。 画家算法 若zmax(P)zmin(Q) , P确实是比Q距离视线更远。 Q在P的前向面, P确实是比Q距离视线更远。 Q在P的后向面, P比Q距离视线更近,需要交换P、Q的位置。 画家算法 前、后向面判别方法: 平面上任意一点与另一平面任意顶点作一连线,平面的法线矢量与该连线的夹角小于90度,那个平面位于该平面的前向面一边;否则位于后向面一边。 Z缓冲器算法 画家算法需要对多边形排序,计算量大 Z缓冲器算法简单稳定,利于硬件实现。 Z缓冲器是一组存储单元,其单元个数与屏幕上的像素个数相同,与帧缓冲器(显存)单元个数相同。它们三者存在一一对应的关系。 Z缓冲器算法 Z缓冲器算法为每一个要填入的像素,不光准备颜色值,还准备一个深度值。 屏幕上像素的显示颜色由对应的帧缓冲器单元中的数值决定,该像素对应的z值存储在Z缓冲器对应单元中。 有多个空间物体对应同一个显示像素。一个颜色值是否能填入显示缓冲器像素,取决于该颜色值所对应的深度值是否大于当前缓冲器中的深度值。 Z缓冲器算法 深度值的获取: 由多边形的任意三个顶点,可以确定平面方程; 将多边形投影到投影平面,并着色; 在着色的过程中可以确定多边形的每一个内点坐标; 由内点坐标和平面方程可以确定内点对应的纵坐标(深度值)。 Z缓冲器算法 Z缓冲器算法的缺点是需要太多的缓冲存储空间,要准备一个与屏幕像素对应的深度Z值存储空间。 对于当前的计算机(或显卡),不成问题。但在该算法提出的当年,是一个大问题。 当时为了克服这一问题,提出了扫描线Z缓冲器算法。 扫描线Z缓冲器算法 Z缓冲器算法的缺点是需要很大的Z缓冲器;每一点处都需要计算它的纵坐标值,计算量大。 为了克服第一个缺点,可以把整个显示平面分成若干个区域,一区一区来显示,这样Z缓冲器的单元数只要等于一个区域的像素个数。 如果把区域变成显示屏幕的一行,就得到扫描线Z缓冲器算法。 扫描线Z缓冲器算法 缓冲区由区域变成水平扫描线,问题发生质的变化: 使用一个多边形表(PT)对所有的多边形排序、分类; 使用一个活化多边形表(APT)列出与当前扫描线相交的多边形; 为每个多边形建立一个边表(ET); 使用一个活化边表(AE

文档评论(0)

dart001 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档