计算机图形学-第7章-消除隐藏线和隐藏面.ppt

计算机图形学-第7章-消除隐藏线和隐藏面.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章 隐藏面的消除 这一章我们将介绍消除隐藏面的方法。 7.1 概述 未经消隐的图形 隐藏线和隐藏面 形体之间互相遮挡的隐藏线 消隐与消隐对象有关,也与观察者的位置有关 1. 物体空间的消隐算法 2. 图象空间的消隐算法 7.2 消隐算法常用的几种几何计算方法 7.2.1 平面多边形的外法矢量 7.2.2 深度检验 7.2.3 排序 7.2.4 求交点、交线 7.3 深度(z)缓冲器算法 深度缓冲器算法的基本思想 深度缓冲器算法原理 沿扫描线计算深度值 计算每个面片左边界的深度值 如图所示,由最上方顶点出发,沿多边形的左边递推地计算各点的z坐标 其中m为该边斜率。将上式代入平面方程,沿该边还可递推的计算出深度值 深度缓冲器算法原理 7.3 扫描线深度缓冲器算法 7.3 扫描线深度缓冲器算法 扫描线深度缓冲器算法的步骤 2.隐藏面的消除 7.4 区间扫描线算法 7.5 深度排序算法(画家算法) 算法原理:若场景中任何多边形在深度上均不贯穿或循环遮挡,则各多边形的优先级顺序可完全确定。? 一个典型的优先级算法步骤 7.6 可见面光线追踪算法 上述简单算法可用为代码描述如下 作业 深度排序算法: 1.将多边形按深度进行排序:距视点近的优先级高,距视点远的优先级低。 2.由优先级低的多边形开始逐个对多边形进行扫描转换。 其中的关键是将多边形按深度进行排序。 处理简单的画面元素如多边形时,该方法常被称为油画家算法。这是由于算法过程与画家创作一幅油画过程类似。画家先画背景,然后画中间景物,最后才画近景。画家采用相反的优先级顺序构造画面,从而解决可见性问题。 深度优先级算法从深度优先级排序开始,按照画面中的各元素离视点的距离确定一个深度优先级表。若该表是完全正确的,则画面中任两个元素在深度上均不重叠。算法执行时,先从离视点最远的画面元素开始,一次将每个像素写入帧缓冲器。表中离视点较近的元素覆盖帧缓冲器中原有内容,于是,隐藏面的问题迎刃而解。 画家算法原理 当多边形相互交叉覆盖时,画家算法出现困难,如图中的情况,均无法直接建立确定的深度优先表,解决的办法是沿多边形所在平面之间的交线循环地分割这些多边形,直至最终可建立确定的优先级表。 算法通常沿着观察坐标系统的轴(通常是z轴)来计算各物体表面的z坐标。它对场景中的各个物体表面单独的进行处理,且在各面片上逐点进行。物体的描述转化为投影坐标之后,多边形面上的每个点(x,y,z)均对应于观察平面上的正投影点(x,y)。因而,对于观察平面上的每个象素点(x,y),其深度比较可通过它们z值的比较来实现。 观察者 对于右手坐标系系统,z值最大的点应是可见的;左手坐标系统,z值最小的点应是可见的。下面以左手系为例。深度缓冲器算法有两个缓冲器:深度缓冲器和帧缓冲器。对应两个数组:深度数组depth(x,y)和属性数组intensity(x,y)。前者存放着图象空间每个可见象素的z坐标,后者用来存储图象空间每个象素的属性(光强或颜色)值。初始时,深度缓冲器所有单元均置为最大值,帧缓冲器各单元均置为背景色。 然后逐个处理多边形表中的各面片,每次扫描一行。计算该行各象素点(x,y)所对应的深度值,并将其与深度缓冲器中该象素单元所存储的深度值depth(x,y)进行比较,若 zdepth(x,y) depth(x,y)=z 而且将该象素的属性值I(x,y)写入帧缓冲器,即 则 intensity(x,y)=I(x,y) 否则不变。 也可用背面剔除进行预处理(见讲义169 7.3),以提高效率。 下面介绍深度值的计算。若已知多边形的方程,则可用增量法计算扫描线每一个象素的深度。设平面方程为 ax+by+cz+d=0 则 z=-(ax+by+d)/c , c?0 即 在同一扫描线上y=常数,因此沿扫描线上象素xi+1=xi+?x处的深度为 (7.14) 对于某一个面片,a/c是常数,故沿扫描线的后续点的深度值,可由上式仅执行一次加法计算即可求出。 对于每条扫描线,首先计算出与其相交的多边形最左边的交点所对应的深度值,然后,该线上所有后续点由式(7.14)计算。 (7-16) (7-15) 所有多边形处理完毕,则把帧缓冲器intensity(x,y)向显示缓冲器输出,即得消隐后的图形(图象)。 若该边为垂直边,则斜率为无穷大,则上式变为 要注意的是:上述的平面是经过透视变换或轴测投影变换的平面。由此可看出保留z坐标的用途。 由此可以看出,深度缓冲器算法比较简单。它的主要缺点是,深度数组和属性数组需要占很大的内存,虽然属性数组可以由显示缓冲器代替,但仅深度数组占用的内存也相当大了。例如,对于一个800×600分辨率则需要480000个单元的缓冲器

文档评论(0)

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

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

1亿VIP精品文档

相关文档