深度缓冲器法的消隐问题_第1页
深度缓冲器法的消隐问题_第2页
深度缓冲器法的消隐问题_第3页
深度缓冲器法的消隐问题_第4页
深度缓冲器法的消隐问题_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深度缓冲器法的消隐问题

0消隐的投影图的表现在现实世界中,如果观察到一个不透明的物体,我们只能看到物体表面朝我们所见的表面,而其他表面可能无法看到。在计算机生成立体图形时,物体的所有部分都将表现出来,不管是可见的还是不可见的。这样的图形所表示的物体形状是不清楚的,甚至是不确定的。如图1(a)所示的立方体,就可以有图(b)、(c)两种解释:其一是从立方体的左上方向下看得到(b);其二是从立方体的右下方向上看到到(c)。由此可见要得到一个确定的立体感强的投影图,就需要消除稳藏线和隐藏面,也就是在给定的投影图中,确定物体哪些边、面是可见的,哪些边、面是不可见的,并消除那些不可见的棱线和表面,这就是所谓的消隐问题。消隐问题是计算机图形学研究的重点课程之一。1消隐方法1.1法向量的方向背面消除不是一个完整的隐面消除方法,但它是隐面消除算法中的关键部分。对于单个凸多边体背面消除即可以达到隐面消除的目的。假设给定视点位置,为了决定一个面相对于视点为可见还是不如图3所示,在某一表面内取两个向量P(p1,p2,p3)和q(q1,q2,q3),它们向量积p×q是一个与该向量所确定的平面垂直的法向量n=p×q,n方向由右手法则定义。为了得到符合要求的p和q,对所考虑的表面按逆时针方向取出2、3、8号三个顶点,根据2、3、8号顶点坐标算出p和q的各分向量p1,p2,p3和q1,q2,q3,根据p和q,就可算出n。视线向量v=(v1,v2,v3),由视点和2号坐标可求分向量v1,v2,v3。法向量n和视线向量v之间夹角有如下关系:根据该结果的正负号判定θ大小范围,数量积大于0,则θ<90°,否则0≥90°。如前所述,0<90°时表示表面可见,否则为不可见。对于一个单一的凸多面体而言,背面消除可以完全消除不可见的面,而对于一个多物体组成的复杂体,仅仅通过背面消除是不够的,还需要做进一步的测试。但是背面消除是一个关系的步骤,简单地经过该过程就可以消去大约50%的隐藏面。1.2像素点位置的处理深度缓冲器法是图象空间中一种常用的方法。它的基本思想是对于显示屏上的每一个像素点,测试一系列平面,记录下位于此像素投射线上最靠近观察点的平面的深度。除了深度外,还需要记录下用以显示此对象的亮度值。深度缓冲器算法采用两个数组,一个记录每一个像素点的深度值;一个记录此像素点所对应对象的亮度值,其过程为:(1)对于屏上每个像素点,置深度缓冲器Depth[x][y]为一较大值,置亮度缓冲器为背景值;(2)对于景中的每个多边形,找出多边形投影到屏上时位于其边界内的全部像素。对于这些像素计算出此多边形在(x,y)处的深度z;如果z<Depth[x][y],此多边形相对于其它多边形在(x,y)处更靠近观察者,所以置Depth[x][y]=z,置亮度数组为该多边形的亮度值。如果z>Depth[x][y],说明该多边形在此像素点处被其它多边形隐藏,所以不采取任何行动。当对所有像素进行扫描后,深度缓冲器和亮度缓冲器分别包含了所有可见点及可见的亮度值。由于采用屏幕坐系进行计算,所以每个像素点(x,y)处的深度值可由如下方程直接计算。z=−Ax−By−DC这时,当扫描线沿X方向增加一个单位时,像素点(x+1,y)处的深度值为:z′=−A(x+1)−By−DC同理,当y=y-1时,像素点(x,y-1)处的深度值为:z′=−Ax−B(y−1)−DC深度缓冲器法量种比较简单的隐面消除法,应用在许多图象显示系统中。1.3深度优先表的建立画家方法就是按照画家作画的过程形成一幅图象的方法。它是根据物体的远近程度的不同来完成隐面消除的。它也称为表优先级法,在物体空间预先计算物体各面可见性优先级,然后在图象空间产生消隐图。它是以深度优先级进行排序的,按照多边形离观察者的远近来建立一张深度优先级表,离观察者远的优先级低,近的优先级高。当深度优先级表确定以后,画面中任意两个图形元素在深度上均不重叠,从而解决消隐问题。表优先级算法的基本思想是建好深度优先级表后,只要从优先级低的多边形开始,依次把多边形颜色填入帧缓冲存储器中以形成多边形图形,直到优先级最高的多边形送入帧缓冲器后,整幅图就显示好了。如图4所示,物体按C、B、A次序进行显示。在建立深度优先表时,对于比较简单的画面,可直接按画中各元素的最大或最小z值排序,如图5(a)所示的情形。但是,对于比较复杂的画面,若按最大或最小z值建立深度优先表,就容易出现错误的结果,如图5(b)所示。若按最大z值对图形元素A、B进行排序,则在深度优先表中,A应排在B的前面。按照这一顺序写入帧缓存器,B将部分地遮挡A。然而实际上A部分地遮挡B。为了得到正确的处理结果需要在深度优先表中交换A、B的位置。建立深度优先表时,常常出现的另一个问题是多边形的相互覆盖或多边形的相互贯穿。如图6(a)所示,A在B的前面,B在C的前面,而C反过来又在A的前面。多边形互相贯穿时,也会出现类似的覆盖情况。如图6(b)所示,P部分地位于Q的前面,而Q又部分地在P的前面。在这两个例子中,都无法根据物体Z值来建立确定的深度优先表。解决的方法是对多边形进行子分割,就是利用多边形所在平面间的交线来分割多边形,如图中的虚线。经过分割后的多边形就可以按Z坐标值的大小进行排序。从建立正确的深度优先表。这种方法是在处理每一幅画面时,动态地计算并产生一个深度优先表,在通过一系列检验确定其深度优先表正确性后,写入帧缓存器,否则重新计算并产生一个新的深度优先表。下面给出这种算法过程的简单描述。(1)计算多边形最大Z值max,并以此值的优先级进行排序,建立初步的深度优先表。按Z值从大到小对多边形进行排序,并记P1P2……Pn。(2)检查表中每个多边形P2P3……Pn与P1的关系a.若P1的最近顶点P1Zmin高视点距离比P2P3……Pn的最远顶点还远,即PjZmax≤P1Zmin(j为2,3,……n),则P1不遮挡其它多边形,转(5),否则转下一步;b.若不满足a,将PjZmax≤P1Zmin的多边形记为Qi(i=1,2,…k),检查P1是否遮挡多边形QI,置i=1。若遮挡转(3)否则转下步;c.判断是i≤k(k≤n),若成立置i=i+1,转d,否则转(5)。d.检查P1是否遮挡Qi,若遮挡转(3),否则转C。(3)变换P1与Qi在表中位置,对重新排列结果重复上述试验,即转(2),若所得检验结果需要再次交换P1与Qi的位置,则表明P1与Qi之间存在交叉覆盖情况,这时转(4)。(4)用P1所在面与Q1所在面的交线分割多边形P1,并且从表中删除多边形P1,转(1)。(5)将P1写入帧缓冲器并以P2替P1,转(2)。如何来确定两个平面P和Q是否遮挡呢?下面给出几种分类测试方法:①深度覆盖测试设在深度分类表中,P和Q是两个相邻多边形平面,当P、Q满足条件Pzmin≤Qzmin,Pzmax≤Qzmin时,P位于Q之前。②面积覆盖测试如果多边形平面P和Q在XOY面投影无覆盖关系,P与Q分离。③两平面前后关系如果P平面的各顶点位于Q平面远离视点一侧,或者Q项点都在P的靠近视点一侧,则P不遮档Q。④平面分解如果上述测试全部失败,则必需求取交线,对平面进行分解。1.4窗口再分割算法描述Warnock算法是一种区域细分算法,它既可用于消除隐藏线,也可用于消除隐藏面,它适用于解决多边形所表示的画面的消隐问题。Warnock算法遵循“细分与占领”的设计思想。首先在图像空间中设置一个窗口,用递归过程来判定窗口内是否有可见的目标(多边形)。当判定的窗口中不包含任何多边形或者窗口内只有与一个多边形的相交部分时,称这个多边形为可见。这时可直接显示该窗口,否则,就将该窗口分割成若干较小的窗口,直到被分割的窗口所含的画面足够简单可直接显示为止。每分割一次窗口,就把上述判断推理的原则递归地应用到每一个较小的窗口中去。多边形与窗口之间存在以下四种关系,如图7所示:当窗口与每个多边形关系确定后,有些窗口内的图形便可显示输出,另外一些还需要进一步细化,Warnock方法具体过程表述为:(1)设置一个与图形视见区域同样大小的窗口,并取为当前窗口。(2)确定当前窗口与多边形的关系。(3)检验当前窗口是否需要再分割,原则上有几种:a.若画面中所有多边形与当前窗口分离,则此窗口为空,不需要再分割,以背景的明暗度或颜色显示窗口,并转步骤(5)。b.若当前窗口中仅包含一个多边形,则此窗口内多边形外区域作为背景显示,多边形内区域,以该多边形明暗度或颜色显示,并转步骤(5)。c.若窗口与一多边形相交,则窗口中多边形的区域外按背景显示,相交多边形位于窗口内的区域以该多边形明暗度或颜色显示,并转步骤(5)。d.若当前窗口为一多边形所包围,且窗口内无其它多边形或相交多边形部分,则该窗口以包围多边形相应明暗度或颜色显示,并转步骤(5)。e.若当前窗口至少为一个多边形所包围,且此多边形离视点最近,则这一窗口按此多边形相对应的明暗度或颜色显示,并转步骤(5)。f.若不属于上述五种情

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论