图形学教案第七章消除隐藏线和隐藏面(精品).ppt
《图形学教案第七章消除隐藏线和隐藏面(精品).ppt》由会员分享,可在线阅读,更多相关《图形学教案第七章消除隐藏线和隐藏面(精品).ppt(88页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第七章第七章 消除隐藏线和隐藏消除隐藏线和隐藏面的算法面的算法 消隐消隐 面消隐面消隐 线消隐线消隐三维形体表示为三维形体表示为多边形多边形表面形集合表面形集合投影约定为沿着投影约定为沿着z z轴正向的轴正向的正交正交投影投影消除隐藏面算法:消除隐藏面算法:图象空间算法图象空间算法 客体空间算法客体空间算法 图象空间算法对显示设备上每一个图象空间算法对显示设备上每一个可分辨可分辨象素象素进行判断,看组成物体进行判断,看组成物体的多个多边形表面中哪一个在该象的多个多边形表面中哪一个在该象素上可见,即要对每一象素检查所素上可见,即要对每一象素检查所有的表面。有的表面。客体空间算法把注意力集中在分析
2、客体空间算法把注意力集中在分析要显示要显示形体形体各部分之间的关系上,各部分之间的关系上,这种算法对每一个组成形体的表面,这种算法对每一个组成形体的表面,都要与其它各表面进行比较,以便都要与其它各表面进行比较,以便消去不可见的面或面的不可见部分。消去不可见的面或面的不可见部分。第一节第一节 线面比较法消除隐藏线线面比较法消除隐藏线 多面体的面可见性多面体的面可见性 凸多面体的可见面就是朝向观察位凸多面体的可见面就是朝向观察位置的面置的面 设观察方向由设观察方向由指向观察位置指向观察位置的一的一个方向向量个方向向量k k给出,所考查的面的外法给出,所考查的面的外法向量是向量是n n,则这两个向量
3、的夹角则这两个向量的夹角 满满足足0 0 /2/2时,所考查面是可见时,所考查面是可见的,否则就是不可见的的,否则就是不可见的 把把n n和和k k记作记作 则则分子分子 为为正正 ,则则 ,面为可见;若为面为可见;若为负负,则,则 ,面为,面为不可见;若为不可见;若为零零,则,则 ,此面退化为,此面退化为线。线。设空间有一个四面体,顶点设空间有一个四面体,顶点A A,B B,C C,D D的坐标依次是(的坐标依次是(0 0,0 0,0 0),),(2 2,0 0,1 1),(),(4 4,0 0,0 0),(3,2,1),(3,2,1)从从z z轴正向无穷远处观察轴正向无穷远处观察,求各面的
4、可求各面的可见性见性 观察方向向量是观察方向向量是k=(0,0,1),k=(0,0,1),三角三角面面DABDAB的法向量是的法向量是:因此因此,,面,面DABDAB为可见面为可见面.类似类似计算可知,面计算可知,面DBCDBC是可见面是可见面,面面ADCADC是不可是不可见面见面,面面ACBACB退化为线。退化为线。利用外法线就可以判断凸多面体上利用外法线就可以判断凸多面体上各表面的可见性,由此就能解决对单个各表面的可见性,由此就能解决对单个凸多面体的隐藏线和隐藏面的消除问题。凸多面体的隐藏线和隐藏面的消除问题。消除消除隐藏线隐藏线的线面比较法的最先一的线面比较法的最先一步就是利用外法线判断
5、出所有可能的可步就是利用外法线判断出所有可能的可见面,可能可见面上的线段是可能可见见面,可能可见面上的线段是可能可见线。线。要依次用每一条可能可见线,与每要依次用每一条可能可见线,与每一个可能可见面比较一个可能可见面比较,从而确定出可见,从而确定出可见线、隐藏线及可见线上的隐藏部分。线、隐藏线及可见线上的隐藏部分。可能可见线和可能可见面可能可见线和可能可见面 空间任一线段,只有其投影与多边空间任一线段,只有其投影与多边形表面的形表面的投影范围发生交迭投影范围发生交迭时,才可能时,才可能与多边形表面有遮档关系与多边形表面有遮档关系 一个多边形表面的投影范围一个多边形表面的投影范围 范围检查也称为
6、范围检查也称为最大最小检验最大最小检验,即通过,即通过比较有关的最大或最小值来判定范围的比较有关的最大或最小值来判定范围的交迭情形。交迭情形。按按XvXv方向对投影范围的检查,可分别方向对投影范围的检查,可分别计算出投影线段和多边形表面计算出投影线段和多边形表面投影范围投影范围X X坐标的最大值和最小值,设分别是坐标的最大值和最小值,设分别是 于是若于是若 或者或者 ,线线段和多边形表面就必然没有遮挡关系。段和多边形表面就必然没有遮挡关系。显然按显然按x xv v方向或按方向或按y yv v方向都可以类似地方向都可以类似地做范围检查,这时可避免消除隐藏面时很做范围检查,这时可避免消除隐藏面时很
7、多不必要的深度比较。多不必要的深度比较。z zv v方向的范围检查是沿方向的范围检查是沿z zv v方向观方向观察时察时粗略的深度检验粗略的深度检验。在此范围检查中若线段投影的最在此范围检查中若线段投影的最大大z z坐标坐标 小于多边形表面投影范小于多边形表面投影范围最小的围最小的z z坐标坐标 ,则线段完全,则线段完全在表面前面,根本不发生遮挡现象,在表面前面,根本不发生遮挡现象,可以不必再往下做精确的深度检验。可以不必再往下做精确的深度检验。精确深度检验精确深度检验 l2 线段可能被线段可能被遮挡遮挡;线段不会被线段不会被遮挡遮挡;求交点求交点 直线直线L L1 1的参数方程可写成的参数方
8、程可写成X=xX=x1 1,Y=yY=y1 1,Z=zZ=z1 1+t+t,代入平面方程得:代入平面方程得:若若t0,t0,则则Z Z1 1 ,若,若t t0,0,则则Z Z1 1 。需要检查出某一段子线段是否可见。为此可需要检查出某一段子线段是否可见。为此可以取子线段上任意一点,若这点在多边形表面各以取子线段上任意一点,若这点在多边形表面各边线的投影所形成的封闭多边形内,这子线段就边线的投影所形成的封闭多边形内,这子线段就不可见,否则就可见。不可见,否则就可见。空空间间一一条条线线段段可可能能被被一一个个多多边边形形表表面面遮遮挡挡的的消除隐藏线的算法的步骤如下:消除隐藏线的算法的步骤如下:
9、x xv v方向和方向和y yv v方向的方向的范围检查范围检查;若不能判断,;若不能判断,则接着做则接着做z zv v方向的范围检查即方向的范围检查即粗略的深度比较粗略的深度比较;若还不能判断就再进行若还不能判断就再进行精确的深度比较精确的深度比较,比较,比较时应计算线段两端点在可能遮挡它的平面上的时应计算线段两端点在可能遮挡它的平面上的投影点,比较相应的坐标。这时可能出现线段投影点,比较相应的坐标。这时可能出现线段与平面相交需要用与平面相交需要用交点交点,这些交点把线段的投,这些交点把线段的投影分成两部分考虑的情况。判断得知线段确实影分成两部分考虑的情况。判断得知线段确实被平面遮挡了哪些部
10、分做精确计算,计算是求被平面遮挡了哪些部分做精确计算,计算是求出线段的投影与遮挡平面上多边形表面边框投出线段的投影与遮挡平面上多边形表面边框投影的所有交点,这些交点把线段的投影分成可影的所有交点,这些交点把线段的投影分成可见和不可见的一些子线段。对见和不可见的一些子线段。对子线段子线段的可见性,的可见性,先取上面一点做点的先取上面一点做点的包含性包含性检验来进行判断。检验来进行判断。第二节第二节 曲面隐藏线消除的浮动曲面隐藏线消除的浮动水平线算法水平线算法 建立建立M M个象素,则建立个象素,则建立M M个内个内存单元存单元y yu u(j)(j)称之为上浮水平线数称之为上浮水平线数组,在这些
11、单元中先放上初值,组,在这些单元中先放上初值,初值应取成小于初值应取成小于 。曲面方程曲面方程设设平平面面是是最最靠靠近近观观察察者者的,从平面上的,从平面上的曲线的曲线 水平方向每个象素的对应水平方向每个象素的对应x x坐坐标值,计算标值,计算 若若 ,则点,则点 是是可见点,并把可见点,并把 内容成内容成 。若若 ,则,则 为不可见,为不可见,就不要改变就不要改变 的内容了。的内容了。上图上图c c点附近的线虚部分应是可见点附近的线虚部分应是可见的,但按上述算法却成了不可见了。的,但按上述算法却成了不可见了。为了解决这个问题,可另建立为了解决这个问题,可另建立M M个单个单元元 ,可称之为
12、下浮水平线数组。,可称之为下浮水平线数组。初值取成初值取成 或比这更大或比这更大一点得数,每次求出一点得数,每次求出 IfthenIfthen 如果函数如果函数 是用离散点形式是用离散点形式 给出,则可如下处给出,则可如下处理。这时的理。这时的 单元个数不是由单元个数不是由显示器在显示器在x x方向的象素个数来定,而是根方向的象素个数来定,而是根据给定的离散点在据给定的离散点在x x方向的个数来定方向的个数来定。基本想法是用线性插值法所得直线基本想法是用线性插值法所得直线来代替两个点之间的曲线。若上述判断来代替两个点之间的曲线。若上述判断结果为结果为 均为不可见,均为不可见,则认为平面则认为平
13、面 上的从上的从 的的一段曲线为不可见。若两点均为可见,一段曲线为不可见。若两点均为可见,则用这两点的连线代替原来这两点之间则用这两点的连线代替原来这两点之间的曲线,并认为可见的,若这两点中有的曲线,并认为可见的,若这两点中有一点可见,如图的一点可见,如图的A A点,另一点则为不可点,另一点则为不可见,如图中的见,如图中的B B点,这时要求出点连线的点,这时要求出点连线的交点交点E E。AEAE部分为可见,部分为可见,EBEB为不可见。为不可见。ABCDE 一般用一般用 两族两族曲线来表示一曲面时常用斜投影。曲线来表示一曲面时常用斜投影。为了得到消隐后曲面表示,不为了得到消隐后曲面表示,不能对
14、两族曲线分别消隐在叠加在一能对两族曲线分别消隐在叠加在一起,正确的做法是对两族曲线一起起,正确的做法是对两族曲线一起做,即处理好平面一段曲线后,马做,即处理好平面一段曲线后,马上处理平面的一段曲线。上处理平面的一段曲线。X=XkZ=ZiB第三节第三节 深度排序算法深度排序算法 深度排序算法的主要步骤:深度排序算法的主要步骤:1.1.把把所所有有的的多多边边形形按按顶顶点点最最大大z z坐坐标标值值进行排序。进行排序。2.2.解解决决当当多多边边形形z z范范围围发发生生交交迭迭时时出出现现的不明确问题。的不明确问题。3.3.按最大按最大z z坐标值逐渐减小的次序,对坐标值逐渐减小的次序,对每个
15、多边形进行扫描转换。每个多边形进行扫描转换。算法的基本思想是按多边形离算法的基本思想是按多边形离开观察位置的开观察位置的距离距离进行排序,然后进行排序,然后按照按照距离减少距离减少的次序,把每个多边的次序,把每个多边形内部点应有的象素值送入帧缓存形内部点应有的象素值送入帧缓存存贮器中。存贮器中。算法考查多边形的深度次序是算法考查多边形的深度次序是在客体空间中进行,图形显示时覆在客体空间中进行,图形显示时覆盖步骤是在图象空间中实现,所以盖步骤是在图象空间中实现,所以可以说是一个可以说是一个客体空间和图象空间客体空间和图象空间的混合算法。的混合算法。不明确问题检验方法不明确问题检验方法 所有多边形
16、按顶点最大所有多边形按顶点最大z z坐标值坐标值排序后得到一个排序表,设排序后得到一个排序表,设P P是排在是排在表中最后的那个多边形。表中最后的那个多边形。设设Q Q是排在是排在P P前面并且前面并且z z坐标范围坐标范围与其发生交迭的一个多边形,对与其发生交迭的一个多边形,对Q Q与与P P的次序关系进行检查。的次序关系进行检查。检查可以按下面列出的五个步检查可以按下面列出的五个步骤进行,每个步骤判断一种情况。骤进行,每个步骤判断一种情况。1 1多多边边形形的的x x坐坐标标范范围围不不相相交交迭迭,所所以以多边形不相交迭。多边形不相交迭。2 2多多边边形形的的y y坐坐标标范范围围不不相
17、相交交迭迭,所所以以多边形不相交迭。多边形不相交迭。3.P3.P整个在整个在Q Q远离观察点的一侧。远离观察点的一侧。4.Q4.Q整个在整个在P P的靠近观察点的一侧。的靠近观察点的一侧。5.5.多多边边形形在在z=0z=0平平面面上上的的投投影影本本身身不不相相交迭。交迭。如果所有这五步检查都为假,就假如果所有这五步检查都为假,就假定定P P是遮挡了是遮挡了Q Q,交换交换P P和和Q Q在排序表中的在排序表中的位置。位置。如果仍做交换,算法会永远循环下如果仍做交换,算法会永远循环下去而没有结果。去而没有结果。为了避免循环,可以做一个限制。为了避免循环,可以做一个限制。当做过首次五步检查后,
18、发生某个多边当做过首次五步检查后,发生某个多边形被移到排序表的末尾时,就立即加上形被移到排序表的末尾时,就立即加上一个标记,以后就不能再做移动。出现一个标记,以后就不能再做移动。出现再次应该移动时,用一个多边形再次应该移动时,用一个多边形所在的平面,把另一个多边形剪裁分所在的平面,把另一个多边形剪裁分为两个。为两个。PQ/第四节第四节 画家算法画家算法 画家算法又称深度优先级表画家算法又称深度优先级表法,它是深度排序算法的一种具法,它是深度排序算法的一种具体实现。体实现。先画远景,再画中景,最后先画远景,再画中景,最后画近景。画近景。810011011110100001001100161234
19、26736587514843785621 边界表示边界表示 三元组表示物体顶点的坐标。三元组表示物体顶点的坐标。四元组表示物体的某个面由哪些顶点构成,四元组表示物体的某个面由哪些顶点构成,每个面顶点个数都是每个面顶点个数都是4 4个。个。程序中所使用的数据结构包括点记录程序中所使用的数据结构包括点记录(vertexvertex)、)、面记录(面记录(patchpatch)和排序数组。点和排序数组。点记录由五个域构成。其中,三个域用于存储点记录由五个域构成。其中,三个域用于存储点的空间坐标,另外两个域用于存储点的投影的空间坐标,另外两个域用于存储点的投影(屏幕)坐标。面记录由四个域组成,每个域(
20、屏幕)坐标。面记录由四个域组成,每个域存放对应的顶点号。排序数组的每个元素有两存放对应的顶点号。排序数组的每个元素有两个域,其中一个域存放面与视点的距离,另一个域,其中一个域存放面与视点的距离,另一个域存放该面的面号。个域存放该面的面号。ReadkeyboardReadkeyboard:打打开开物物体体的的边边界界表表示示数数据据文文件件,从从键键盘盘读读进进旋旋转转角角和和透透视视角角,物物体体表表面面的颜色参数(色彩和饱和度),光源方向。的颜色参数(色彩和饱和度),光源方向。Vertices:读读进进顶顶点点的的空空间间坐坐标标,计计算算物物体体的的包包围围球球半半径径,把把物物体体缩缩小
21、小到到单单位位球球中中去去,计算物体各顶点在屏幕上的投影坐标。计算物体各顶点在屏幕上的投影坐标。开始开始Patches:读读进进面面定定义义数数据据,求求出出各各面面与与视视点点的的距距离离,把把面面号号与与距距离离放放进进排排序序数数组组。然然后后以以面面与与视视点点的的距距离离为为参参照照值值,对对数数组组进进行行排排序。序。Gmode:使使终终端端进进入入图图形形状状态,设备参数初始化态,设备参数初始化Setpen:建立查色表建立查色表Painting:从从排排好好序序的的数数组组中中依依次次取取出出一一面面号号,计计算算对对应应面面的的法法向向量量,再再计计算算该该面面的的光光强,然后
22、显示该面。强,然后显示该面。Amode:终端返回文字状态。终端返回文字状态。结束结束第五节第五节 z z 缓冲算法缓冲算法 z z 缓冲算法缓冲算法(深度缓冲算法深度缓冲算法)是一种是一种最简单的图象空间算法。对每一个点,这最简单的图象空间算法。对每一个点,这个算法不仅需要有一个个算法不仅需要有一个更新缓冲器更新缓冲器存储各存储各点的象素值,而且还需要有一个点的象素值,而且还需要有一个z z 缓冲缓冲存储器存储器存储相应的存储相应的z z值。帧缓冲存储器初值。帧缓冲存储器初始化为背景值,始化为背景值,z z缓冲存储器初始化为可缓冲存储器初始化为可以表示的最大以表示的最大z z值。对每一个多边形
23、,值。对每一个多边形,不不必必进行深度排序算法要求的进行深度排序算法要求的初始排序初始排序,立,立即就可以逐个进行扫描转换。即就可以逐个进行扫描转换。扫扫描描转转换换时时,对对每每个个多多边边形形内内部部的的任任意意点点(x,yx,y),实施如下步骤:实施如下步骤:1 1 计计算算在在点点(x x,y y)处处多多边边形形的的深深度度值值z z(x x,y y)。)。2 2如如果果计计算算所所得得的的z z(x x,y y)值值,小小于于在在z z 缓缓冲冲存存储储器器中中点点 x x y y 处处记记录录的的深深度度值值,那那么么就做:就做:(1 1)把把值值z z x x y y 送送入入
24、z z 缓缓冲冲存存储储器的点处。器的点处。(2 2)把多边形在深度)把多边形在深度z(xz(x y y 处应有的象处应有的象素值,送入更新缓冲存储器的点素值,送入更新缓冲存储器的点 x x y y 处。处。算法中深度计算,可通过多边形的算法中深度计算,可通过多边形的顶点坐标求出所在平面的方程,然后再顶点坐标求出所在平面的方程,然后再使用平面方程,对每个点使用平面方程,对每个点 x x y y,解出相解出相应的应的z z。对面方程对面方程 ,解出解出 是:是:设在点(设在点(x,yx,y)处的深度值是处的深度值是z z1 1:则在点(则在点(x+x,yx+x,y)处的深度值就是处的深度值就是z
25、 z 缓冲算法的工作流程:缓冲算法的工作流程:帧缓冲区置成背景色;帧缓冲区置成背景色;z z 缓冲区置成最小缓冲区置成最小z z值;值;for(for(各个多边形各个多边形)扫描转换该多边形;扫描转换该多边形;for(for(计算多边形所覆盖的每个象素(计算多边形所覆盖的每个象素(x,yx,y))计算多边形在该象素的深度值计算多边形在该象素的深度值Z(x,y)Z(x,y);if(Z(x,y)if(Z(x,y)大于大于Z Z缓冲区中的缓冲区中的(x,y)(x,y)处的值处的值)把把Z(x,y)Z(x,y)存入存入Z Z缓冲区中的缓冲区中的(x,y)(x,y)处;处;把把多多边边形形在在(x,y)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 教案 第七 消除 隐藏 精品
限制150内