《计算机图形学基础教程课件》由会员分享,可在线阅读,更多相关《计算机图形学基础教程课件(45页珍藏版)》请在金锄头文库上搜索。
1、ComputerGraphics第九章 动态消隐 9.1 9.1 图形的数据结构图形的数据结构 9.2 9.2 消隐算法分类消隐算法分类 9.3 9.3 隐线算法隐线算法9.4 9.4 隐面算法隐面算法 本章内容本章内容9.1 9.1 图形的数据结构图形的数据结构 W.K.GiloiW.K.Giloi在其著作在其著作Interactive Computer Interactive Computer GraphicsGraphics中提出:中提出: Computer Graphics=Computer Graphics=Data Structure+Graphics Algorithms+Lan
2、guageData Structure+Graphics Algorithms+Language9.1.1 9.1.1 图形的几何信息和拓扑信息图形的几何信息和拓扑信息 9.1.2 9.1.2 基本图形的数据结构基本图形的数据结构 9.1.3 9.1.3 立体表示模型立体表示模型 9.1.1 9.1.1 图形的几何信息和拓扑信息图形的几何信息和拓扑信息 几何信息:描述几何元素空间位置的信息。几何信息:描述几何元素空间位置的信息。拓扑信息:描述几何元素之间相互连接关系的信息。拓扑信息:描述几何元素之间相互连接关系的信息。 描述一个物体不仅要有几何信息的描述而且还要描述一个物体不仅要有几何信息的描
3、述而且还要有拓扑信息的描述。因为只有几何信息的描述,在表有拓扑信息的描述。因为只有几何信息的描述,在表示上存在不惟一性。如图示上存在不惟一性。如图9-19-1所示的五个顶点,其几所示的五个顶点,其几何信息已经确定,如果拓扑信息不同,则可产生图何信息已经确定,如果拓扑信息不同,则可产生图9-9-2 2和和9-39-3所示的两种不同图形。所示的两种不同图形。9.1.2 9.1.2 基本图形的数据结构基本图形的数据结构 在三维在三维坐标系下,坐标系下,描述一个物描述一个物体不仅需要体不仅需要顶点表,而顶点表,而且还需要边且还需要边表和面表,表和面表,才能完全表才能完全表达清楚。达清楚。 立体的数据结
4、构 顶顶点点x x坐坐标标y y坐坐标标z z坐坐标标P P1 1x x1 10 0y y1 10 0z z1 10 0P P2 2x x2 20 0y y2 2a az z2 20 0P P3 3x x3 30 0y y3 3a az z3 3a aP P4 4x x4 40 0y y4 40 0z z4 4a aP P5 5x x5 5a ay y5 50 0z z5 50 0P P6 6x x6 6a ay y6 6a az z6 60 0P P7 7x x7 7a ay y7 7a az z7 7a aP P8 8x x8 8a ay y8 80 0z z8 8a a表表9-1 9-1
5、 立方体顶点表立方体顶点表 边边起点起点终终点点E E1 1P P1 1P P2 2E E2 2P P2 2P P3 3E E3 3P P3 3P P4 4E E4 4P P4 4P P1 1E E5 5P P5 5P P6 6E E6 6P P6 6P P7 7E E7 7P P7 7P P8 8E E8 8P P8 8P P5 5E E9 9P P1 1P P5 5E E1010P P2 2P P6 6E E1111P P3 3P P7 7E E1212P P4 4P P8 8表表9-2 9-2 立方体边表立方体边表 面面边边1 1边边2 2边边3 3边边4 4F F1 1E E1 1E
6、E4 4E E3 3E E2 2F F2 2E E5 5E E6 6E E7 7E E8 8F F3 3E E9 9E E8 8E E1212E E4 4F F4 4E E1010E E2 2E E1111E E6 6F F5 5E E1 1E E1010E E5 5E E9 9F F6 6E E3 3E E1212E E7 7E E1111表表9-39-3立方体面表立方体面表 9.1.3 9.1.3 立体表示模型立体表示模型 计算机三维模型的描述的发展:计算机三维模型的描述的发展: 线框模型线框模型表面模型表面模型实体模型实体模型 所表达的几何体信息越来越完整。所表达的几何体信息越来越完整。
7、1.1.线框模型(线框模型(Wireframe ModelWireframe Model)线框模型是计算机图形学中表示立体最早使用的线框模型是计算机图形学中表示立体最早使用的模型。线框模型只是用几何体的边线来表示立体的外模型。线框模型只是用几何体的边线来表示立体的外形,就如同用边线搭出的框架一样,线框模型中没有形,就如同用边线搭出的框架一样,线框模型中没有表面、体积等信息。线框模型只使用顶点表和边表两表面、体积等信息。线框模型只使用顶点表和边表两个数据结构就可以描述面点之间的拓扑关系。个数据结构就可以描述面点之间的拓扑关系。图图9-59-5所示是一个典型的立方体线框模型。线框模所示是一个典型的
8、立方体线框模型。线框模型的优点是可以产生任意方向视图,视图间能保持正型的优点是可以产生任意方向视图,视图间能保持正确的投影关系。线框模型的缺点也很明显,因为所有确的投影关系。线框模型的缺点也很明显,因为所有棱边全部绘制出来,理解方面容易产生棱边全部绘制出来,理解方面容易产生二义性二义性,如图,如图9-69-6所示。从原理上说,线框模型不能划分有限元网所示。从原理上说,线框模型不能划分有限元网格、不能进行两个面的求交运算。格、不能进行两个面的求交运算。立体线框模型表示 线框模型表示的二义性 2.2.表面模型(表面模型(Surface ModelSurface Model)表面模型是利用立体的外表
9、面来构造模型,表面模型是利用立体的外表面来构造模型,就如同在线框模型上蒙上了一层外皮,使立体具就如同在线框模型上蒙上了一层外皮,使立体具有了一定的轮廓,可以进行消隐处理,但表面模有了一定的轮廓,可以进行消隐处理,但表面模型仍缺乏体积的概念,是一个立体的空壳。与线型仍缺乏体积的概念,是一个立体的空壳。与线框模型相比,表面模型增加了一个面表,用以记框模型相比,表面模型增加了一个面表,用以记录边面之间的拓扑关系。录边面之间的拓扑关系。表面模型的优点是可以进行面着色,隐藏面表面模型的优点是可以进行面着色,隐藏面消隐,以及表面积计算,有限元网格划分等。消隐,以及表面积计算,有限元网格划分等。 缺缺点:无
10、法进行立体之间的相交运算。立方体表面点:无法进行立体之间的相交运算。立方体表面模型如图模型如图9-79-7所示所示立方体表面模型表示 3.3.实体模型(实体模型(Solid Model)Solid Model)几何模型发展到实体模型阶段,如同在立体几何模型发展到实体模型阶段,如同在立体表面模型的内部进行了填充,使之具有了如体积表面模型的内部进行了填充,使之具有了如体积和重量等特性,更能反映立体的真实性,这时的和重量等特性,更能反映立体的真实性,这时的立体才具有立体才具有“体体”的概念。实体的概念。实体模型与表面模型模型与表面模型的不同之处在于确定了表面的哪一侧存在实体。的不同之处在于确定了表面
11、的哪一侧存在实体。在表面模型的基础上可以采用有向棱边隐含地表在表面模型的基础上可以采用有向棱边隐含地表示出表面的外法矢方向,常使用右手法则取向,示出表面的外法矢方向,常使用右手法则取向,四个手指沿闭合的棱边方向,大拇指方向与表面四个手指沿闭合的棱边方向,大拇指方向与表面外法矢量方向一致。拓扑合法的立体在相邻两个外法矢量方向一致。拓扑合法的立体在相邻两个面的公共边界上,棱边的方向正好相反,如图所面的公共边界上,棱边的方向正好相反,如图所示。示。立方体实体模型表示 面面边边1 1边边2 2边边3 3边边4 4F F1 1E E1 1E E4 4E E3 3E E2 2F F2 2E E5 5E E
12、6 6E E7 7E E8 8F F3 3E E9 9E E8 8E E1212E E4 4F F4 4E E1010E E2 2E E1111E E6 6F F5 5E E1 1E E1010E E5 5E E9 9F F6 6E E3 3E E1212E E7 7E E1111 实体模型只需将面表改成环表形式,实体模型只需将面表改成环表形式,就可确切地分清体内体外,表就可确切地分清体内体外,表9-39-3中边的顺中边的顺序已经符合这一要求,也可以作为实体模型序已经符合这一要求,也可以作为实体模型的面表。实体模型和线框模型、表面模型的的面表。实体模型和线框模型、表面模型的根本区别在于其数据结
13、构不仅记录了全部几根本区别在于其数据结构不仅记录了全部几何信息,而且记录了全部点、线、面、体的何信息,而且记录了全部点、线、面、体的拓扑信息。实体模型常采用集合论中的并、拓扑信息。实体模型常采用集合论中的并、交、差等运算来构造复杂形体。交、差等运算来构造复杂形体。9.2 9.2 消隐算法分类消隐算法分类 无论多么复杂的空间物体,无论多么复杂的空间物体,沿视线方向上都只能看到一部分沿视线方向上都只能看到一部分表面,其余的表面背向观察者不表面,其余的表面背向观察者不可见。计算机图形学的一个重要可见。计算机图形学的一个重要任务就是对空间物体的表面进行任务就是对空间物体的表面进行可见性检测,绘制出可见
14、边线和可见性检测,绘制出可见边线和表面。经过消隐后得到的图形称表面。经过消隐后得到的图形称为消隐图。为消隐图。根据消隐方法的不同,消隐算法可分为两类:根据消隐方法的不同,消隐算法可分为两类:1.1.隐线算法。隐线算法。用于消除物体上不可见的边界线。隐用于消除物体上不可见的边界线。隐线算法主要是针对线框模型提出的,它只要求画出线算法主要是针对线框模型提出的,它只要求画出物体的各可见棱边。物体的各可见棱边。隐线算法隐线算法 隐面算法隐面算法 2.2.隐面算法。隐面算法。用于消除物体上不可见的表面。隐用于消除物体上不可见的表面。隐面算法主要针对表面模型提出的,它不仅要求画面算法主要针对表面模型提出的
15、,它不仅要求画出物体的各个可见棱边,而且还要求填充各个表出物体的各个可见棱边,而且还要求填充各个表面。面。计算机图形学的创始人计算机图形学的创始人SoutherlandSoutherland根据消隐空根据消隐空间的不同,将消隐算法分为三类:间的不同,将消隐算法分为三类:1.1.物空间消隐算法:物空间消隐算法:在描述物体的坐标在描述物体的坐标系空间中进行消隐。系空间中进行消隐。2.2.像空间消隐算法:像空间消隐算法:在物体投影后的二在物体投影后的二维图像空间中进行消隐。维图像空间中进行消隐。3.3.物像空间消隐算法:物像空间消隐算法:在描述物体的坐在描述物体的坐标系空间和图像空间同时进行消隐。标
16、系空间和图像空间同时进行消隐。9.3 9.3 隐线算法隐线算法 物体的线框模型消隐一般在物空物体的线框模型消隐一般在物空间中进行。物空间消隐算法是根据边间中进行。物空间消隐算法是根据边界线的可见性检测条件,判断哪些边界线的可见性检测条件,判断哪些边界线是可见的,哪些边界线是不可见界线是可见的,哪些边界线是不可见的,在屏幕上只绘制可见边界线。的,在屏幕上只绘制可见边界线。9.3.1 9.3.1 凸多面体凸多面体消隐算法消隐算法 在消隐问题中,在消隐问题中,凸多面体消隐是最简单凸多面体消隐是最简单和最基本的情形。凸多面体具备这样的性质:和最基本的情形。凸多面体具备这样的性质:连接立体上不同表面的任
17、意两点的直线完全连接立体上不同表面的任意两点的直线完全位于该凸多面体之内。凸多面体由凸多边形位于该凸多面体之内。凸多面体由凸多边形构成,其表面要么完全可见,要么完全不可构成,其表面要么完全可见,要么完全不可见。凸多面体消隐算法的关键是见。凸多面体消隐算法的关键是给出测试其给出测试其表面边界线可见性的判别式。表面边界线可见性的判别式。 事实上,对于凸多面体事实上,对于凸多面体的任一个面,可以根据的任一个面,可以根据其外法矢量和视矢量的其外法矢量和视矢量的夹角夹角来进行可见性检来进行可见性检测。测。如果两个矢量的夹角如果两个矢量的夹角0 09090时时,表示,表示该表面可见;该表面可见;如果如果9
18、090180180时时,表示该表面不可见。表示该表面不可见。图9-11 凸多面体方向:右手拇指与四指垂直,四指指向u的方向,弯向v的方向,则大拇指指向为矢量积方向。以以图图9-119-11为例来进行具为例来进行具体说明。体说明。 面面ADCBADCB的外法线矢量的外法线矢量N=ADN=AD ADAD;(后面);(后面)面面EFGHEFGH的外法线矢量的外法线矢量N=EFN=EF EGEG; (前面)(前面)面面AEHDAEHD的外法线矢量的外法线矢量N=AEN=AE AHAH; (左面)(左面) 已知各顶点的三维已知各顶点的三维坐标时,可求出各表面坐标时,可求出各表面的外法线矢量。的外法线矢量
19、。图9-11 凸多面体H H(x xh h,y,yh h,z,zh h)G G(x xg g,y,yg g,z,zg g)E E(x xe e,y,ye e,z,ze e)F F(x xf f,y,yf f,z,zf f)图图9-12 9-12 计算表面法矢量计算表面法矢量 在图在图9-129-12中取前面中取前面EFGHEFGH上的一点上的一点E E(xExE,yEyE,zEzE),其外法矢量为),其外法矢量为N N,视矢量为,视矢量为S S,外法矢量和视,外法矢量和视矢量的夹角为矢量的夹角为。首先借助于点首先借助于点F F( xFxF,yFyF,zFzF)和点)和点G G(xGxG,yGy
20、G,zGzG)来计算面的外法矢量。)来计算面的外法矢量。边矢量边矢量EFEF的三个分量为:的三个分量为:FxFxxFxFxExE;FyFyyFyFyEyE;FzFzzFzFzEzE;计算边矢量计算边矢量EGEG的三个分量为:的三个分量为:HxHxxGxGxExE;HyHyyGyGyEyE;HzHzzGzGzEzE;H HG GE EF F 面面EFGHEFGH的外法矢量为两个边矢量的矢量积,外的外法矢量为两个边矢量的矢量积,外法矢量的三个分量为:法矢量的三个分量为: Nx Nx ; Ny Ny ; Nz Nz ;外法矢量表示为:外法矢量表示为: (9-19-1) 式中,式中, i i,j j,
21、k k分别为三维坐标系的分别为三维坐标系的3 3个单位矢量。个单位矢量。给定视点位置球面坐标表示为:给定视点位置球面坐标表示为:( , , ),其),其中:中:R R为视径,为视径, , 。H HG GE EF F则对于前面则对于前面EFGHEFGH上的上的E E(xExE,yEyE,zEzE)点的视矢)点的视矢量分量的计算公式为:量分量的计算公式为:视矢量表示为:视矢量表示为: (9-29-2)式中,式中, i i,j j,k k分别为三维坐标系的三个单位矢分别为三维坐标系的三个单位矢量。量。表面外法矢量和视矢量的数量积为:表面外法矢量和视矢量的数量积为: (9-39-3) 式(式(9-39
22、-3)中分母为正,所以)中分母为正,所以coscos的正负取的正负取决于表面外法矢量和视矢量的数量积的分子:决于表面外法矢量和视矢量的数量积的分子: 。 凸多面体表面凸多面体表面可见性检测条件为:可见性检测条件为: 当当0 09090时,时, 立方体表面可见,绘该表面多边形;立方体表面可见,绘该表面多边形; 当当=90=90时,时, 表面外法矢量与视矢量垂直,立方体表面多边表面外法矢量与视矢量垂直,立方体表面多边形退化为一条直线,绘出该直线;形退化为一条直线,绘出该直线; 当当9090180180时,时, 立方体表面不可见,不绘制该多边形。立方体表面不可见,不绘制该多边形。 立方体消隐前的透视
23、变换图如图立方体消隐前的透视变换图如图9-139-13所示,所示,消隐后的透视变换图如图消隐后的透视变换图如图9-149-14所示。所示。图图9-13 9-13 消隐前的立方体消隐前的立方体 图图9-14 9-14 消隐后的立方体消隐后的立方体 9.4 9.4 隐面算法隐面算法 物体的表面模型输出一般在像空间中物体的表面模型输出一般在像空间中进行消隐。像空间消隐算法属于像素级算进行消隐。像空间消隐算法属于像素级算法,以屏幕像素为采样单位,确定投影于法,以屏幕像素为采样单位,确定投影于每一像素的可见表面颜色区域,并将可见每一像素的可见表面颜色区域,并将可见表面颜色作为该像素的显示颜色。隐面算表面
24、颜色作为该像素的显示颜色。隐面算法主要包括:法主要包括:Z-BufferZ-Buffer算法、画家算法、算法、画家算法、区域采样算法等。本节主要介绍最著名的区域采样算法等。本节主要介绍最著名的Z-BufferZ-Buffer算法和画家算法。算法和画家算法。9.4.1 Z-B9.4.1 Z-BUFFERUFFER算法算法 CatmullCatmull在在19741974年提出了年提出了Z-BufferZ-Buffer算法。在物算法。在物空间内不对立体进行可见性检测,每个面的像素空间内不对立体进行可见性检测,每个面的像素点均以指定颜色全部绘制出来,在像空间中根据点均以指定颜色全部绘制出来,在像空间
25、中根据深度值确定最终绘制的立体各个表面的像素点颜深度值确定最终绘制的立体各个表面的像素点颜色。色。Z-BufferZ-Buffer算法属于像空间消隐算法。算法属于像空间消隐算法。Z-BufferZ-Buffer算法也称深度缓冲算法,通常算法也称深度缓冲算法,通常x x,y y代表屏代表屏幕坐标,而幕坐标,而z z则用来表示立体上各个面的深度,故名则用来表示立体上各个面的深度,故名Z-Z-BufferBuffer算法。建立三维坐标系如图算法。建立三维坐标系如图9-199-19所示,三维右手所示,三维右手坐标系中心位于立方体体心处,坐标系中心位于立方体体心处,x x轴向右,轴向右,y y轴向上,轴
26、向上,z z轴从体心指向观察者,轴从体心指向观察者,xyzxyz形成右手坐标系。观察者的形成右手坐标系。观察者的视线方向沿着视线方向沿着z z轴负向,指向轴负向,指向xoyxoy坐标面。对于图示立方坐标面。对于图示立方体,体,z z轴与立方体的前面交于(轴与立方体的前面交于(x x,y y,z1z1),与立方体),与立方体的后面交于(的后面交于(x x,y y,z2z2)。前面和后面在屏幕上的投影)。前面和后面在屏幕上的投影坐标(坐标(x x,y y)相同,但)相同,但z1z1z2z2,(x x,y y,z1z1)离观察者近,()离观察者近,(x x,y y,z2z2)离观察者)离观察者远。对
27、于投影像素点(远。对于投影像素点(x x,y y),前面像素点(),前面像素点(x x,y y,z1z1)的颜色将覆盖后面像素点()的颜色将覆盖后面像素点(x x,y y,z2z2)的颜色,显)的颜色,显示结果为前面像素点(示结果为前面像素点(x x,y y,z1z1)的)的RGBRGB颜色。颜色。这样这样Z-BufferZ-Buffer算法需要建立算法需要建立两个缓冲器两个缓冲器:一个是:一个是深度缓冲器深度缓冲器,用于记录立体上每一个像素的深度值,用于记录立体上每一个像素的深度值,初始化为立体的最小深度值(初始化为立体的最小深度值(z z坐标)。设屏幕像素点坐标)。设屏幕像素点如图如图9-
28、209-20所示,则深度缓冲器如图所示,则深度缓冲器如图9-219-21所示;另一个所示;另一个是是帧缓冲器帧缓冲器,用于记录立体上每个像素点的颜色值,用于记录立体上每个像素点的颜色值,初始化为屏幕的背景色。帧缓冲器如图初始化为屏幕的背景色。帧缓冲器如图9-229-22所示。所示。Z-BufferZ-Buffer算法对立体的各个表面全部进行采样,算法对立体的各个表面全部进行采样,将采样点变换到屏幕坐标系的图像空间,并记录其深将采样点变换到屏幕坐标系的图像空间,并记录其深度度z z坐标值。根据采样点在屏幕上的投影位置,将其深坐标值。根据采样点在屏幕上的投影位置,将其深度与已存储在帧缓存器中相应像
29、素点处的深度值进行度与已存储在帧缓存器中相应像素点处的深度值进行比较。如果新采样点的深度值大于原可见点的深度值,比较。如果新采样点的深度值大于原可见点的深度值,表明新采样点更靠近观察者,遮住了原采样点,则用表明新采样点更靠近观察者,遮住了原采样点,则用新采样点处的颜色值更新帧缓存器中相应采样点处的新采样点处的颜色值更新帧缓存器中相应采样点处的颜色值,同时用新采样点的深度值更新深度缓存器中颜色值,同时用新采样点的深度值更新深度缓存器中的采样点的深度值;否则,不作更改。的采样点的深度值;否则,不作更改。图图9-219-21深度缓冲器深度缓冲器 图图9-229-22帧缓冲器帧缓冲器 图图9-20 9
30、-20 屏幕像素点屏幕像素点Z-BufferZ-Buffer算法算法实现的难点是如何计算采样点的实现的难点是如何计算采样点的深度值深度值z z(x x,y y)。对图)。对图9-199-19所示的静止立方体,立所示的静止立方体,立方体前面和后面都平行于方体前面和后面都平行于xoyxoy坐标面,上面、下面、坐标面,上面、下面、左面和右面四个表面皆与屏幕坐标系的左面和右面四个表面皆与屏幕坐标系的xoyxoy面垂直,面垂直,立方体的投影为正方形,这时,前面和后面的深度立方体的投影为正方形,这时,前面和后面的深度值很容易计算,立方体的消隐结果为正方形。本节值很容易计算,立方体的消隐结果为正方形。本节讲
31、解的是旋转立方体的动态讲解的是旋转立方体的动态Z-BufferZ-Buffer消隐算法。消隐算法。视线方向当立方体处于图当立方体处于图9-239-23所示的所示的位置时,六个面皆为都不与位置时,六个面皆为都不与屏幕平行,这时需要根据每屏幕平行,这时需要根据每个面的平面方程计算其上各个面的平面方程计算其上各个像素点深度值,这里需要个像素点深度值,这里需要用到第四章已经讲解的有效用到第四章已经讲解的有效边表算法来访问面上的每一边表算法来访问面上的每一个像素点进行消隐。个像素点进行消隐。对于图对于图9-249-24所示的立方体表面,其平面一般所示的立方体表面,其平面一般方程为:方程为: (9-99-
32、9)式中系数式中系数A A,B B,C C是该平面的一个法矢量的坐是该平面的一个法矢量的坐标,即标,即 根据表面顶点的坐标值可以计算出两个根据表面顶点的坐标值可以计算出两个边矢量:边矢量: 矢量矢量 矢量矢量 根据两个边矢量的叉积,可求得系数根据两个边矢量的叉积,可求得系数A A,B B,C C: 将将A A、B B、C C和点(和点(x1,y1,z1x1,y1,z1)代入方程)代入方程(9-99-9),得:),得: 这样,从方程(这样,从方程(9-99-9)可以得到当前像)可以得到当前像素点(素点(x x,y y)处的深度值:)处的深度值: 这里,如果这里,如果C C0 0,说明多边形表面的
33、法,说明多边形表面的法矢量与矢量与z z轴垂直,在轴垂直,在xoyxoy面内的投影为一条直面内的投影为一条直线,在算法中可以不予以考虑。线,在算法中可以不予以考虑。 如果已知扫描线如果已知扫描线y yi i与多边形相交的最左与多边形相交的最左边的像素点坐标为(边的像素点坐标为(x xi i,y yi i)处的深度值)处的深度值z z(x xi i,y yi i),其相邻点(),其相邻点(x xi+1i+1,y yi i)处的深度)处的深度值为值为z z(x xi+1i+1,y yi i)。)。 计算出多边形每个面上各个像素计算出多边形每个面上各个像素点的深度值后,就可以使用点的深度值后,就可以
34、使用Z-BufferZ-Buffer算算法进行消隐,旋转立方体消隐效果如图法进行消隐,旋转立方体消隐效果如图9-259-25所示。使用所示。使用Z-BufferZ-Buffer算法可以绘制算法可以绘制带有交叉面的立体图形,如图带有交叉面的立体图形,如图9-269-26所示,所示,这种图形由于同一个面的深度值不一样,这种图形由于同一个面的深度值不一样,只能使用只能使用Z-BufferZ-Buffer算法实现。图算法实现。图9-279-27所所示为移动交叉面的一个组件的动态过程。示为移动交叉面的一个组件的动态过程。图图9-25 9-25 不同角度的立方体消隐图不同角度的立方体消隐图 图图9-26
35、9-26 交叉面的交叉面的Z-Z-BufferBuffer算法算法图图9-27 9-27 交叉面的组件可移动交叉面的组件可移动 的的Z-BufferZ-Buffer算法算法 Z-Buffer Z-Buffer算法是在像素级上以近物取代算法是在像素级上以近物取代远物的消隐算法,与立体表面在屏幕上的出远物的消隐算法,与立体表面在屏幕上的出现顺序无关。现顺序无关。Z-BufferZ-Buffer算法原理简单,有利算法原理简单,有利于硬件实现,并且不需要进行排序,但于硬件实现,并且不需要进行排序,但Z-Z-BufferBuffer算法最大的缺点是占用大量内存空间。算法最大的缺点是占用大量内存空间。对于
36、对于10241024768768的屏幕客户区,每个数组需的屏幕客户区,每个数组需要占用要占用102410247687682 2个字节存储单元。一般个字节存储单元。一般处理方法是只在立体投影所占用的屏幕范围处理方法是只在立体投影所占用的屏幕范围内建立缓冲器数组,可以有效减少存储容量,内建立缓冲器数组,可以有效减少存储容量,但这时要考虑缓冲器数组下标和屏幕坐标系但这时要考虑缓冲器数组下标和屏幕坐标系中像素点位置(中像素点位置(x,yx,y)的对应关系。)的对应关系。9.4.2 9.4.2 画家算法画家算法 计算机绘图时,屏幕颜色不能堆积,只能按计算机绘图时,屏幕颜色不能堆积,只能按照景色离视点距离
37、的远近,用近景颜色取代远景照景色离视点距离的远近,用近景颜色取代远景颜色,这称为画家算法。画家算法是在物空间内颜色,这称为画家算法。画家算法是在物空间内对立体表面进行优先级排序,在像空间内进行消对立体表面进行优先级排序,在像空间内进行消隐,属于物像空间消隐算法。隐,属于物像空间消隐算法。画家算法又称深度排序算法。原理是,先把画家算法又称深度排序算法。原理是,先把屏幕色设为背景色,再把物体的各个面按其离视屏幕色设为背景色,再把物体的各个面按其离视点距离的远近排序形成深度优先级表,离视点远点距离的远近排序形成深度优先级表,离视点远者优先级低,位于表头;离视点近者优先级高,者优先级低,位于表头;离视
38、点近者优先级高,位于表尾。然后按从表头到表尾的顺序绘制各个位于表尾。然后按从表头到表尾的顺序绘制各个表面。优先级高的表面颜色取代优先级低的表面表面。优先级高的表面颜色取代优先级低的表面颜色,相当于消除了隐藏面。颜色,相当于消除了隐藏面。9.5 9.5 本章小结本章小结 本章主要讲解了三维图形的动态消隐本章主要讲解了三维图形的动态消隐算法。三维图形的消隐算法分为隐线算法算法。三维图形的消隐算法分为隐线算法和隐面算法。隐线算法主要针对线框模型和隐面算法。隐线算法主要针对线框模型进行,根据表面法矢量和视矢量的夹角进进行,根据表面法矢量和视矢量的夹角进行可见性判断,不需要计算面的深度值;行可见性判断,不需要计算面的深度值;隐面算法主要针对表面模型进行,隐面算隐面算法主要针对表面模型进行,隐面算法是像素级消隐算法,需要动态计算每个法是像素级消隐算法,需要动态计算每个面上各像素点的深度值,有一定难度,请面上各像素点的深度值,有一定难度,请读者参阅第读者参阅第4 4章的多边形填充的有效边表章的多边形填充的有效边表算法。算法。