第九讲 消隐.ppt

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

消隐 一.消隐 什么叫做“消隐”?为什么要进行“消隐”? 将三维场景绘制在计算机二维显示屏上必须经过投影变换,投影变换将三维信息变换到二维平面上,这个过程中深度信息被丢失,生成的图形往往具有二义性。 要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为“消隐”。 经过消隐得到的投影图称为物体的真实图形。 通过消隐,也可降低光照、纹理等算法的计算量。 消隐结果与被观察物体有关,也与视点、视方向有关。 消隐 消隐的分类 根据消隐算法实现时所在的坐标系(空间)进行分类 : 图像空间消隐 对象空间消隐 消隐算法 背面剔除算法 画家算法 BSP树算法 深度缓冲器算法 Warnock 算法 消隐 一.背面消隐算法 利用视线方向V和物体表面法向N之间的关系 N?V0:不可见 N?V?0:可见 消隐 背面剔除适用于凸多面体,不适用于凹多面体或其它复杂物体 二.画家算法 在景物空间确定物体之间的可见性顺序(物体离视点远近),由远及近地绘制出正确的图像结果——画家算法 将场景中的多边形序列按其z坐标的最小值zmin (物体上离视点最远的点)进行排序 3.当物体间的z值范围重叠时: 进一步判断多边形P是否遮挡场景中多边形Q 作如下5个判别步骤 多边形P和Q的x坐标范围是否不重叠 多边形P和Q的y坐标范围是否不重叠 从视点看去,多边形P是否完全位于Q的背面 从视点看去,多边形Q是否完全位于P的正面 多边形P和Q在xy平面上的投影是否不重叠 如果上述五种情况中只要有一种成立,就表明多边形P和Q是互不遮挡的,即多边形P的绘制优先级低于Q 如果上述判断都不成立,说明多边形P有可能遮挡Q,此时把多边形P和Q进行互换重新进行判断 P和Q交换顺序后,仍不能判断其优先级顺序, 三.BSP树算法 基本原理: 与画家算法类似,优先绘制后面的多边形 使用BSP树对场景中的对象进行排序 1. 构建场景的BSP树 依据当前视点所在位置,对场景中的每个分割面所生成的两个子空间进行分类 包含视点的标为Front,后面的标为Back 被分割面穿过的物体,被划分成两个部分,例如: 上图中的C物体被分割面P1划分成C,B两部分 2 . 遍历BSP树,优先绘制标为Back的区域; 四. 深度缓冲器算法( Z-Buffer算法) 帧缓冲器:用来存储图像中每个象素属性(颜色); 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值的计算可以根据平面方程求得。 设平面方程为:ax+by+cz+d=0 则? z=-(ax+by+d)/c??c≠0 已知多变形某一顶点的深度值,可以用增量法计算多边形其他点的z值: z(x+⊿x,y) = z(x,y)- ⊿x*a/c z(x,y+⊿y) = z(x,y)- ⊿y*b/c 优点: 1)简单稳定,利于硬件实现; 2)不需要整个场景的几何数据; 3)要被显示的元素可按任意顺序写入帧缓冲器和Z缓冲器,不需要进行深度排序,节省了排序时间; 4)被显示的画面可以任意复杂,因为图像空间的大小是固定的,最坏情况下,计算量随画面复杂程度线性增长。 缺点: 1)需要一个额外的Z缓冲器; 2)在每个多边形占据的每个像素处都要计算深度值,计算量大。 本算法结合光照,透明等相关算法后,可产生较佳效果。 五. Warnock 算法 缓冲器算法将像素孤立来考虑,未利用相邻像素之间存在的属性的连贯性,即区域的连贯性,所以算法效率不高。 多边形至少覆盖了绘图窗内的一块区域,这块区域由多边形在投影平面上的投影的边界围成。 如果能将这类区域找出来,再用相应的多边形颜色加以填充则避免了在每个像素处计算深度值,消隐问题也就解决了。 算法基本思路: 首先将场景中的多边形投影到绘图窗口内 判断窗口是否足够简单,若是则算法结束; 否

文档评论(0)

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

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

1亿VIP精品文档

相关文档