消除隐藏线和隐藏面.ppt
《消除隐藏线和隐藏面.ppt》由会员分享,可在线阅读,更多相关《消除隐藏线和隐藏面.ppt(99页珍藏版)》请在装配图网上搜索。
1,第七章消除隐藏线和隐藏面的算法,给出一个三维形体,要画出确定的立体感强的投影视图,必须决定形体上哪些线或哪些面是不可见的,不可见的部分不显示,这就是消除隐藏线与隐藏面的问题。,2,?,?,3,哪些部分是不可见的,与观察位置有关。对某个确定的视点,需要确定遮挡关系。面消隐:当采用面模型显示物体时,确定可见面,消除场景中物体的不可见面,即消除隐藏面。线消隐:当显示采用线框模型表示的物体时,要消除不可见的线,即隐藏线的消除。,4,确定可见性的基本思想非常简单,但用计算机程序实现时,一般要涉及到相当复杂的计算。针对不同的需要,提出了各种不同的算法。假设:三维形体表示为多边形表面形成的集合,投影约定为沿着z轴正向的正交投影消除隐藏面算法:图象空间算法(ImageSpaceMethods)客体空间算法(ObjectSpaceMethods),5,图象空间算法对显示设备上每一个可分辨象素进行判断,看组成物体的多个多边形表面中哪一个在该象素上可见,即要对每一象素检查所有的表面。客体空间算法把注意力集中在分析要显示形体各部分之间的关系上,这种算法对每一个组成形体的表面,都要与其它各表面进行比较,以便消去不可见的面或面的不可见部分。每步比较都可能涉及较多的计算。,6,第一节线面比较法消除隐藏线,多面体的面可见性凸多面体的可见面就是朝向观察位置的面。设观察方向由指向观察位置的一个方向向量k给出,所考查的面的外法向量是n,则这两个向量的夹角为。若0/2时,所考查面是可见的,否则就是不可见的。,7,8,设则,若分子为正,则,面为可见;若分子为负,则,面为不可见;若分子为零,则,此面退化为线。,9,例:设空间有一个四面体,顶点A,B,C,D的坐标依次是(0,0,0),(2,0,1),(4,0,0),(3,2,1)。从z轴正向无穷远处观察,求各面的可见性。观察方向向量是k=(0,0,1),三角面DAB的法向量是:,10,面DAB为可见面。类似计算可知,面DBC是可见面,面ADC是不可见面,面ACB退化为线。,11,利用外法线就可以判断凸多面体上各表面的可见性,由此就能解决对单个凸多面体的隐藏线和隐藏面的消除问题。对于一个凸多面体,若某个面可见。则该面上所有线均可见,若某个面不可见,则该面轮廓线以外的线都不可见。于是判断出可见面,只显示可见面及与之有关的线段,就画出了消隐后的图形。这个方法只适用于单个凸多面体。,12,对于非凸多面体或多个形体,这个方法通常做为预处理步骤,即先使用这个方法排除往后不必考虑的不可见面。只考虑选出的可能可见面中哪些是可见或部分可见的。消除隐藏线的线面比较法的第一步就是利用外法线判断出所有可能的可见面,可能可见面上的线段是可能可见线。再依次用每一条可能可见线,与每一个可能可见面比较,从而确定出可见线、隐藏线及可见线上的隐藏部分。,13,可能可见线和可能可见面的比较范围检查显然,如果不发生遮挡,就必定不是隐藏线。可以通过简单的范围检查发现这类情况,以避免往后不必要的Z方向的深度比较。,14,一个多边形表面的投影范围,15,如图所示,多边形表面ABCD在ZV=0平面上的正投影是ABCD,包含ABCD且四边分别平行于XV和YV轴的最小矩形PQRS就是ABCD的范围,找出PQRS的方法被称为包围盒方法。,范围检查也称为最大最小检验,即通过比较有关的最大或最小值来判定范围的交迭情形。,16,空间任一线段,只有其投影与多边形表面的投影范围发生交迭时,才可能与多边形表面有遮档关系。,17,按xv方向对投影范围的检查,可分别计算出投影线段和多边形表面投影范围x坐标的最大值和最小值,设分别是,若xmax1xmin2或者xmax2xmin1,线段和多边形表面就必然没有遮挡关系。yv方向也可以类似地做范围检查,可以避免消除隐藏面时很多不必要的深度比较。,18,19,zv方向的范围检查(深度检验)粗略的深度检验在此范围检查中若线段的最大z坐标zmax1小于多边形表面最小的z坐标zmin2,则线段完全在表面前面,根本不发生遮挡现象,可以不必再往下做精确的深度检验。,20,精确深度检验设空间一条线段P1P2和一个平面多边形表面如图所示,过线段两端P1,P2各做一条与zv轴平行的直线l1和l2,这两条直线与平面相交于点P1,P2,为直线两端点在平面上的投影点。显然两组对应点P1和P1,P2和P2的xv坐标和yv坐标相同,比较zv坐标:若z1z1且z2z2,则线段不会被遮挡;若z1z1且z2z2,则线段有可能被遮挡,还需要做进一步检查。,21,22,如果不是上述两种情况,必发生线段与表面相交。可以用求直线与平面交点的方法求出交点,显然这时被交点分开而得到的两条线段,恰好分别属于前面说明的两种情形。,23,直线l1的参数方程:x=x1,y=y1,z=z1+t,代入平面方程得:,求交点平面方程:,解得:,若t0则z1z1,若t0则z1z1。,24,进一步检查这时要对平面遮挡了线段的哪些部分做精确的计算。,25,检查出某一段子线段是否可见取子线段上任意一点,若这点在多边形表面各边线的投影所形成的封闭多边形内,这子线段就不可见,否则就可见。,26,空间一条线段可能被一个多边形表面遮挡的消除隐藏线的算法的步骤如下:xv方向和yv方向的范围检查;若不能判断,则接着做zv方向的范围检查即粗略的深度比较;若还不能判断就再进行精确的深度比较;计算线段两端点在可能遮挡它的平面上的投影点,比较相应的z坐标。这时可能出现线段与平面相交,需要求交点,交点把线段分成两部分。对确实被平面遮挡的部分做精确计算,求出线段的投影与遮挡平面上多边形表面边框投影的所有交点,这些交点把线段的投影分成可见和不可见的一些子线段。对子线段的可见性,先取上面一点做点的包含性检验来进行判断。,27,考虑一条线段被多个多边形表面遮挡而产生需要解决的消除隐藏线情况时,可依次判断被每个多边形表面遮挡产生的隐藏部分。只要被每一个多边形都不能遮挡的公共部分才需要显示。,28,第二节曲面隐藏线消除的浮动水平线算法,这种曲面也可以由和两族曲线来表示。隐藏线消除就是要去掉这两族曲线中被遮挡的部分。,曲面方程,29,30,设,平面是最靠近观察者的,从平面上的曲线开始,对水平方向每个象素的对应x坐标值,计算,一个比较简单的方法:先考虑对应的一族曲线的消隐算法。如果图形显示器在水平方向有M个像素,则建立M个内存单元yu(j),称为上浮水平线数组,在这些单元中先放上初值,初值应取成小于。,31,若,则点是可见点,并把内容成。若,则为不可见,就不改变的内容。,对平面上的曲线完成上述工作后,再对平面上的曲线重复上述工作,这样按z值递减方向一条一条曲线处理过去,就得到一组消除隐藏线的曲线族了。,32,图c点附近的线虚部分应是可见的,但按上述算法却成了不可见了。为了解决这个问题,可另建立M个单元,可称之为下浮水平线数组。,C,33,初值取成或比这更大一点的数,每次求出,若,则为可见,并如下修改相应的值,34,如果函数是用离散点形式给出,则可如下处理。这时的单元个数不是由显示器在x方向的象素个数来定,而是根据给定的离散点在x方向的个数来定。基本想法是用线性插值法所得直线来代替两个点之间的曲线。,35,若上述判断结果为均为不可见,则认为平面上的从的一段曲线为不可见。若两点均为可见,则用这两点的连线代替原来这两点之间的曲线,并认为可见的,若这两点中有一点可见,如图的A点,另一点则为不可见,如图中的B点,这时要求出AB连线和CD连线的交点E。AE部分为可见,EB为不可见。,36,一般用两族曲线来表示一曲面时常用斜投影。,为了得到消隐后曲面表示,不能对两族曲线分别消隐再叠加在一起,正确的做法是对两族曲线一起做,即处理好平面上一段曲线后,马上处理平面上的一段曲线,对这两族曲线用公共的和消隐。,37,38,第三节深度排序算法,深度排序算法的主要步骤:1.把所有的多边形按顶点最大z坐标值进行排序。2.解决当多边形z范围发生交迭时出现的不明确问题。3.按最大z坐标值逐渐减小的次序,对每个多边形进行扫描转换。,39,算法的基本思想是按多边形离观察位置的距离进行排序,然后按照距离减小的次序,把每个多边形内部点应有的象素值送入帧缓存存贮器中。算法考查多边形的深度次序是在客体空间中进行,图形显示时覆盖步骤是在图象空间中实现,所以是一个客体空间和图象空间的混合算法。,40,41,不明确问题检验方法,所有多边形按顶点最大z坐标值排序后得到一个排序表,设P是排在表中最后的那个多边形。在把P扫描转换送入更新缓冲存贮器中之前,必须对在z坐标范围与其发生交迭的每个多边形进行检查。设Q是排在P前面并且z坐标范围与其发生交迭的一个多边形,对Q与P的次序关系进行检查。,42,检查可以按下面列出的五个步骤进行,每个步骤判断一种情况。各步骤实现检查的复杂程度逐渐增加,只要某一个步骤成功,就可以立即结束检查。1.多边形的x坐标范围不相交迭,所以多边形不相交迭。2.多边形的y坐标范围不相交迭,所以多边形不相交迭。3.P整个在Q远离观察点的一侧。4.Q整个在P的靠近观察点的一侧。5.多边形在z=0平面上的投影本身不相交迭。,43,图7-13第三步检查为真,图7-14第三步检查为假,第四步为真,P,Q,第五步检查为真,44,如果所有这五步检查都为假,就假定P是遮挡了Q,交换P和Q在排序表中的位置。重新进行上述的五步检查。如果仍做交换,算法会永远循环下去而没有结果。为了避免循环,可以做一个限制。当做过首次五步检查后,发生某个多边形被移到排序表的末尾时,就立即加上一个标记,以后就不能再做移动。出现再次应该移动时,用一个多边形所在的平面,把另一个多边形剪裁分为两个。在对某个多边形一分为二完成后,把原来的多边形舍弃,把得到的两个新多边形按深度次序插入到原来的排序表中,然后就可以再开始五步检查,算法和以前一样进行下去。,45,P,Q,46,该算法可以应用于对隐藏边的消除。将更新缓冲器全部用某个象素值v0加以初始化,然后每次对一个多边形做扫描转换时,都将其边界置为需要的不同于v0的某个象素值v1,将其内部置为原来的象素值v0。这样,先被扫描转换的某个多边形,如果与后扫描转换的某个新的多边形发生交迭,原多边形边的被遮挡部分将被新多边形填充的内部值v0所湮没,从而实现了隐藏线的消除。,47,第四节画家算法,画家算法又称深度优先级表法,它是深度排序算法的一种具体实现。这种方法是先把屏幕置成背景色,再把物体的各个面按其离视点的远近进行排序。离视点远者在表头,离视点近者在表尾,构成深度优先级表。然后,从表头至表尾逐个取出多边形,投影到屏幕上,显示多边形所包含的实心区域。由于后显示的图形取代先显示的画面,而后显示的图形所代表的面离视点更近,所以,由远及近地绘制各面,就相当于清除隐藏面。这与油画家作画的过程类似,先画远景,再画中景,最后画近景。由于这个原因,此算法习惯上称作画家算法或油画算法。,48,首先介绍数据文件的格式,然后介绍程序所使用的数据结构,再接着介绍程序的算法流程图,最后对个别子程序功能作一些解释。物体采用边界表示模式存储。数据文件由若干三元组和若干四元组组成。三元组表示物体顶点的坐标。四元组表示物体的某个面由那些顶点构成,每个面顶点个数都是4个。如图7.15所示,为一个立方体的数据文件。边界表示:三元组表示物体顶点的坐标。四元组表示物体的某个面由哪些顶点构成,每个面顶点个数都是4个。,49,81001101111010000100110016123426736587514843785621,50,程序中所使用的数据结构包括:点记录(vertex)、面记录(patch)和排序数组。点记录由五个域构成:其中,三个域用于存储点的空间坐标,另外两个域用于存储点的投影(屏幕)坐标。面记录由四个域组成,每个域存放对应的顶点号。排序数组的每个元素有两个域,其中一个域存放面与视点的距离,另一个域存放该面的面号。,51,Vertices:读进顶点的空间坐标,计算物体的包围球半径,把物体缩小到单位球中去,计算物体各顶点在屏幕上的投影坐标。,52,53,54,第五节z缓冲算法,z缓冲算法(深度缓冲算法)是一种最简单的图象空间算法。对每一个点,这个算法不仅需要有一个更新缓冲器存储各点的象素值,而且还需要有一个z缓冲存储器存储相应的z值。帧缓冲存储器初始化为背景值,z缓冲存储器初始化为可以表示的最大z值。对每一个多边形,不必进行深度排序算法要求的初始排序,立即就可以逐个进行扫描转换。,55,在扫描转换时,对每个多边形内部的任意点(x,y),实施如下步骤:1.计算在点(x,y)处多边形的深度值z(x,y)。2.如果计算所得的z(x,y)值,小于在z缓冲存储器中点xy处记录的深度值,那么就做:1)把值zxy送入z缓冲存储器的点处。2)把多边形在深度z(xy处应有的象素值,送入更新缓冲存储器的点xy处。,56,算法中深度计算,可通过多边形的顶点坐标求出所在平面的方程,然后再使用平面方程,对每个点xy,解出相应的z。,平面方程,解出是:,57,则在点(x+x,y)处的深度值就是,设在点(x,y)处的深度值是z1:,58,z缓冲算法的工作流程:帧缓冲区置成背景色;z缓冲区置成最大z值;for(各个多边形)扫描转换该多边形;for(计算多边形所覆盖的每个象素(x,y))计算多边形在该象素的深度值Z(x,y);if(Z(x,y)小于Z缓冲区中的(x,y)处的值)把Z(x,y)存入Z缓冲区中的(x,y)处;把多边形在(x,y)处的亮度值存入帧缓存区的(x,y)处;,59,第六节扫描线算法,扫描线算法是图像空间算法,它建立图像是通过每次处理一条扫描线来完成的。这个算法是第二章讨论的多边形填充的扫描线算法的推广。在多边形填充的扫描线算法中,只是对一个多边形做扫描转换,而这里是同时对多个多边形做扫描转换。,60,首先建立一个边表ET。ET中各登记项按边的较小的y坐标递增排列;每一登记项下的“吊桶”,按所记x坐标递增排列。“吊桶”中各项的内容依次是:1.与较小的y坐标对应的端点的x坐标xmin。2.边的另一端点的较大的y坐标ymax。3.x的增量x,它实际上是边的斜率的倒数,是从一条扫描线走到下一条扫描线时,按x方向递增的步长。4.边所属多边形的标记。,61,两个多边形在zv=0平面上的投影,设有两个空间的三角形ABC、DEF,各顶点的坐标依次是(1,1,10),(2,5,10),(5,3,10),(3,4,5),(4,6,5),(6,2,5)。,62,两个多边形建立的“吊桶”已排序的边表,63,还需要一个多边形表PT(polygonTable),其中要包含下列信息:每个多边形所在平面方程的系数。在需要比较深度时,要通过所在(x,y),根据平面方程解出深度z。每个多边形的亮度或颜色值。实际做扫描转换时应用。一个“进入退出”标志,初值为“假”。在扫描转换处理时,用以标记扫描线对该多边形是“进入”,还是“退出”。,64,操作通过一个活动边表AET进行。,65,通过以上的讨论,可以写出整个扫描线算法实施的步骤:首先正确形成边表ET和多边形表PT之后,然后实施步骤与第二章叙述的多边形填充的扫描线算法的实施步骤基本相同,只是需要把那里的步骤:在扫描线y上,按照AET表提供的x坐标对,用color实施填充修改加细如下:,66,1将实施扫描转换时遍查AET表中各“吊桶”的指针i初始置为1,扫描线正在多少个多边形内的累计数值s初始置为零,将活动多边形表,即扫描线正在通过的多边形按深度递增次序排列而形成的表,记为P,初始置为空。2设第i个“吊桶”记录的相应多边形是A。若A的“进入/退出”标记FA为“假”,则改FA为“真”,将A加到表P的前面,s增加1。否则,FA即为“真”,则改FA为“假”,将P中的A去掉,s减少1。,67,3若s=0,则到5。(这时扫描线不在任何多边形内,正通过背景,不必做扫描转换。)若s=1,则到4。(这时扫描线只在一个多边形内,不必做深度比较,去做扫描转换。)若前面两个判断都为“假”,扫描线至少在两个多边形内,应做深度比较。对表P前面两个多边形做深度比较,比较后放回应保证P表中的多边形按深度递增的次序。,68,4对第i个和第i+1个“吊桶”存有的x坐标指示的扫描线上的一段,按照P表最前面多边形指示的亮度或颜色,实施扫描转换。5i增加1,若i所指已无“吊桶”,步骤结束,去下一步骤(删除y=ymax的边;x=x+dx;排序;y=y+1;将ET中y对应的各吊桶加入AET)。否则,回到步骤2。,69,70,71,如果按照步骤3的条件决定是否做深度比较,会有许多深度比较是不必要的。例如,假定有一个大的多边形GHIJ在两个三角形ABC和DEF的后面。在扫描线y=离开边CB时,按步骤3的条件判断,扫描线还同时在DEF和GHIJ中,应该做深度比较,但是在大多数可以假定没有多边形穿透另一个多边形的情况下,DEF和GHIJ的深度关系并没有变化,深度比较是不必要的。所以,如果扫描线从一个被遮挡的多边形中走出,深度比较将是不必要的;扫描线从一个遮挡了其它多边形的多边形中走出,深度比较才可能必要。,72,三个多边形,73,事实上前面给出的算法基本步骤没有很好地利用深度的相关性。深度相关性是指多个多边形之间的深度关系,常常对于一组相邻的扫描线来说是不变化的。如果在某条扫描线上,在AET表中保存的边及次序关系,与在前面一条扫描线上时完全相同,那么深度关系就不会变化,深度比较也就并不必要了。,74,75,76,背景的处理:最简单的办法是把更新缓冲存储器整个初始化为某个合适的值,于是算法就只需处理扫描线在多边形内的情形。定义一个大的矩形,让他包含了客体中所有的多边形,位于比其它多边形都更远离观察者的平行于投影平面的一个平面上,并具有某个合适的亮度或颜色值。修改算法。使得每当扫描线不在任何多边形内时,就往帧缓冲存储器中送入背景的象素值。,77,第七节区域分割算法,区域分割算法将投影平面分割成区域,考察区域内的图象。如果容易确定在这个区域内某些多边形是可见的,那么就可以显示那些可见的多边形,完成对这一区域的显示任务。否则,就将区域再分割成小的区域,对小的区域递归地进行判断。由于区域逐渐变小,在每个区域内的多边形逐渐变小,最终总可以判定哪些多边形是可见的。这个算法利用了区域的相关性,这种相关性是指位于适当大小的区域内的所有象素,表示的其实是同一个表面。,78,在递归分割的每一步,要显示客体中每个多边形的投影多边形与所考察区域之间的关系,必然是下列四种之一:1.包围的多边形,即多边形全部包含了所考察的区域。2.相交的多边形,即多边形所考察的区域相交。3.被包含的多边形,即多边形全部在所考察的区域之内。4.分离的多边形,即多边形与所考察的区域完全分离。,79,80,若区域与多边形为下面的四种情况,不必再做进一步的分割,可直接绘制。1.所有的多边形与区域分离,所以在区域内只需显示背景值。2.只有一个相交的多边形,或者只有一个被包含的多边形。这时可以对区域首先填充背景值,然后对多边形进行扫描转换。对于相交的多边形,只是被包含的部分被扫描转换。3.只有一个包围的多边形,无其它的多边形。整个区域填充该多边形的象素值。4.有多于一个的包围的、相交的或被包围的多边形,且至少有一个包围的多边形。检查是否能有一个包围的多边形,它位于所有其它多边形的前面。如果有,就可以让整个区域都填充为这个多边形的象素值。,81,具体的检查方法:对所有的多边形,计算其所在平面在区域的四个角点的应有深度,即相应的z坐标,如果有一个包围的多边形的相应的四个z坐标,都小于其它多边形的对应z坐标,那么这个包围的多边形就位于所有其它多边形的前面。,82,情况4的两种情形,83,区域经过分割变小以后,只需要考虑包含的多边形和相交的多边形的变化。因为分离的或包围的多边形,对变小的区域,仍然保持是分离的或包围的。分割进行到达到显示设备的分辨能力之后就可以停止,即最小的区域可以是显示表面上的一个象素单位。如果在做了最大数目的分割之后,仍然不能做出如何填充的决定,就计算所有有关多边形在这个不可再分区域的中心处的z坐标值,取z坐标最小的多边形象素值填充这个区域。,84,分割区域为正方形,Wanock最早提出的区域分割算法是每次把区域分成四个正方形。,85,围绕多边形顶点分割(先是A,后是B),86,区域分割还可以按照客体中多边形投影的范围进行,这可以少做很多分割。Weiler和Atherton提出的算法,直接就用多边形的投影做为分割的区域。选择用做分割的区域时,可以按照多边形各顶点坐标最小值的递增次序,87,按照多边形投影选择区域做分割,88,第八节BSP树算法,BSP(BinarySpace-Partitioning)树算法将表面由后往前地在屏幕上绘出,该算法特别适用于场景中物体位置固定不变、仅视点移动的情况。利用BSP树来判别表面的可见性,其主要操作是选一个平面将景物空间分割为两个半空间,在每次分割空间时,判别该表面相对于视点与分割平面的位置关系,即位于其内侧还是外侧。,89,基本步骤:平面P1将空间分割为两部分,一组物体位于P1的后面(相对于视点),而另一组则在P1之前,而B和D在P1之后。平面P2对空间进行了二次分割,并生成如图(b)所示的二叉树表示。在这棵树上,物体用叶节点表示,分割平面前方的物体组作为左分支,而后方的物体组为右分支。,90,对于由多边形面组成的物体,可以选择与多边形面重合的分割平面,利用平面方程来区分“内”、“外”多边形顶点。随着将每个多边形面作为分割平面,可生成一棵树,与分割平面相交的每个多边形将被分割为两部分。BSP树创建完毕后,可选择树上的面并由后往前显示(优先绘制标识为“back”的子空间中所含的景物),即前面物体覆盖后面的物体。目前已有许多系统借助硬件来完成BSP树创建和处理的快速实现。,91,第九节八叉树算法,当按照八叉树表示来描述观察体时,通常按由前往后的顺序将八叉树节点映射到观察表面,从而消除隐藏面。空间区域的前部(相对于视点)为体元0、1、2、3。体元的前表面均可见,这些体元尾部的表面和后部体元(4、5、6、7)的表面都可能被前部的表面所遮挡。,92,对于当前视线,体元0、1、2、3中的物体总是遮挡后面体元中的物体,观察面S的边界投影将区域A细分为A1和A2,93,显示八叉树的算法:首先递归地由前往后遍历八叉树节点,将八叉树映射为可见区域的四叉树;然后将可见面的四叉树表示置入帧缓冲器中。下图描述一个空间区域内的八叉树元和相应观察平面上对应的四叉体元。八叉树元0和4直接影响四叉体元0,四叉体元1的颜色值从八叉体元1和5获得。另外两个四叉体元的值可以分别从与之对应的一对八叉体元中得到。,94,空间上的八叉体元,观察平面的四叉体元,3,2,1,0,3,2,1,5,4,7,6,95,一般情况下,确定四叉体元的正确颜色值必须同时考虑前面和后面的八叉体元。若前面体元统一用某种颜色填充,则无须处理后面的体元。对于多色区域,将递归调用该过程,并将不同色彩的八叉体元的子节点和一个新创建的四叉树节点作为新参数进行传递。若前面体元为空,则处理尾部体元。否则,需要两次递归调用,一次处理尾部体元,一次则处理前面体元。,96,第十节光线投射算法,考查由视点出发穿过观察平面上一像素而射入场景的一条射线,则可以确定出场景中与该射线相交的物体。在计算出光线与物体表面的交点之后,离像素最近的交点所在的表面即为可见面。这种可见性判别模式应用了光线投射算法。光线投射算法(raycasting)建立于几何光学的基础之上,它沿光线的路径追踪可见面,是一种有效的可见性判别手段。由于场景中有无限多条光线,而我们仅对穿过像素的光线感兴趣,因此可考虑从像素出发,逆向跟踪射入场景的光线路径。光线投射算法对于包含曲面,特别是球面的场景有很高的效率。,97,98,光线投射算法可以看做是深度缓冲器算法的一种变形。在深度缓冲器算法,每次处理一个表面并对表面上的每个投影点计算深度值。计算出来的值与以前保存的深度进行比较,从而确定每个像素所对应的可见表面。在光线投射算法中,每次处理一个像素,并沿光线的投射路径计算出该像素所对应的所有表面的深度值。光线跟踪技术通过追踪多条光线在场景中的路径,以得到多个物体表面所产生的反射和折射效果。而在光线投射中,跟踪的光线仅从每个像素到最近的物体为止。,99,光线投射算法for(y=0;y=ymax;y+)for(x=0;x=xmax;x+)形成通过像素(x,y)的投影线;for(场景中的每一个多边形)将投影线与多边形求交;if(有交点)以最近交点所属多边形的颜色显示像素(x,y);else以背景颜色显示像素(x,y);,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 消除 隐藏
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文