《CG7真实感图形1.ppt》由会员分享,可在线阅读,更多相关《CG7真实感图形1.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、7.1 消除隐藏线消除隐藏线 任何一个空间物体,在空间的任一方向上,任何一个空间物体,在空间的任一方向上,都只能看得见其中的一部分表面和轮廓线。其中都只能看得见其中的一部分表面和轮廓线。其中有一部分表面和轮廓线背向观察者,不可见,在有一部分表面和轮廓线背向观察者,不可见,在计算机图形学中称为计算机图形学中称为隐藏面和隐藏线隐藏面和隐藏线 为了消去隐藏线,只要把表示三维物体的为了消去隐藏线,只要把表示三维物体的每一条线与每一个组成物体的不透明面进行遮每一条线与每一个组成物体的不透明面进行遮蔽判断蔽判断 把不可见线段或部分不可见线段与可见线把不可见线段或部分不可见线段与可见线段或部分可见线段区分开
2、来段或部分可见线段区分开来 画出可见线段和线段的可见部分,不画或画出可见线段和线段的可见部分,不画或用虚线画不可见线段和线段的不可见部分,就用虚线画不可见线段和线段的不可见部分,就得到经过消隐处理的线条图得到经过消隐处理的线条图 消隐算法消隐算法l按实现方式不同分为两大类:按实现方式不同分为两大类:l景物空间景物空间消隐算法消隐算法l图像空间图像空间消隐算法消隐算法 7.1.1 平面体的消隐处平面体的消隐处理理 平面体平面体 平面体是由多个平面多边形构成的立体,一平面体是由多个平面多边形构成的立体,一般分为凸多面体和凹多面体。般分为凸多面体和凹多面体。凸多面体的特点凸多面体的特点 凸多面体具备
3、这样一个性质:连接形体上不凸多面体具备这样一个性质:连接形体上不同表面的任意两点的线段完全位于形体的内部同表面的任意两点的线段完全位于形体的内部 凸多面体由多个平面凸多边形组成,它的多边凸多面体由多个平面凸多边形组成,它的多边形表面要么完全可见,要么完全不可见。形表面要么完全可见,要么完全不可见。凸多面体消隐处理凸多面体消隐处理 在消隐问题中,凸多面体是最简单和最基在消隐问题中,凸多面体是最简单和最基本的情形,其消隐算法的关键是测试其上哪些本的情形,其消隐算法的关键是测试其上哪些表面是可见的,哪些表面是不可见的。表面是可见的,哪些表面是不可见的。 凸多面体消隐处理的思想凸多面体消隐处理的思想
4、利用表面外法线方向可测试物利用表面外法线方向可测试物体表面的可见性体表面的可见性 在此规定法线的方向由物体表面指向外在此规定法线的方向由物体表面指向外部空间,将其称为外法线部空间,将其称为外法线 法向向量N 视线向量V法向向量N 法向向量N 90 90ABCDEFXZYNS 面面ABEDABED的外法线矢量的外法线矢量BEABN 面面ADFCADFC的外法线矢量的外法线矢量DFADNCFBCN 面面BCFEBCFE的外法线矢量的外法线矢量 面面DEFDEF的外法线矢量的外法线矢量EFDEN 面面ACB的外法线矢量的外法线矢量CBACN其中面其中面DEFDEF与面与面ACBACB的外法线方向刚的
5、外法线方向刚好相反。好相反。 当已知各项点的三维坐标时,则可求出各当已知各项点的三维坐标时,则可求出各表表面的外法线矢量。如表面面的外法线矢量。如表面ABED的外法线矢量的的外法线矢量的计算公式为:计算公式为: 321321QQQPPPkjiBEABN其中,其中,BEBEBEABABABzzQyyQxxQzzPyyPxxP321321, 根据上式可求出表面外法线矢量根据上式可求出表面外法线矢量N N的分量:的分量: (7-1)kjizyxNNNNkQPQPjQPPQiPQQPN)()()(122131313232 表面上任一点到视点所形成的向量用表面上任一点到视点所形成的向量用S来来表示,即视
6、线向量:表示,即视线向量: kjizyxSSSS(7-2) 同一个表面各点的视线向量是有差异的。同一个表面各点的视线向量是有差异的。在实际过程中,可假设观察者处于很远位置,在实际过程中,可假设观察者处于很远位置,此时,视线向量相互平行,也即表面各点的视此时,视线向量相互平行,也即表面各点的视线向量均具有同一方向。线向量均具有同一方向。 例如在图例如在图7.27.2所示的空间坐标系中,设定所示的空间坐标系中,设定视线向量视线向量S S平行于平行于Y Y 轴,此时有轴,此时有 S=0, 1, 0 表面的外法线向量表面的外法线向量N和视线向量和视线向量S之间的之间的夹角夹角的大小可反映该法线所在表面
7、的方位情的大小可反映该法线所在表面的方位情况,由此可判断该表面的可见性。况,由此可判断该表面的可见性。 ABCDEFXZYNS 当当090时,即时,即cos0,表面面,表面面向观察者,这样的面称为朝前面,即为可见表向观察者,这样的面称为朝前面,即为可见表面面 当当9018180时,则时,则cosp2,则,则P和和Q的包围盒在的包围盒在x方向分离,否则相互重叠方向分离,否则相互重叠 同样,只要将同样,只要将x改成改成y,就可得到,就可得到P和和Q的包的包围盒在围盒在y方向分离的判断条件方向分离的判断条件3平面多边形位置检测平面多边形位置检测 已知一平面,其方程为已知一平面,其方程为 AxAx十十
8、ByBy十十CzCzD D = 0 (I) = 0 (I)式中式中A,B,C,D为常数。为常数。 设有一平面设有一平面 AxAxByBy十十CzCzD D = =F F (II) (II)显然这两个平面平行显然这两个平面平行 当当F F0 0时,平面(时,平面(II II)位于平面()位于平面(I I)的三)的三个坐标轴正向一侧;个坐标轴正向一侧; 当当F0时,平面(时,平面(II)位于平面()位于平面(I)的)的三个坐标轴负向一侧。三个坐标轴负向一侧。 于是得到于是得到 AxAx十十ByByCzCzD D0 0位于位于 AxAxByByCzCzD D = 0 = 0的坐标轴正向一侧;的坐标轴
9、正向一侧; Ax AxByByCzCzD D0 0位于位于 AxAxByByCzCzD D = 0 = 0的坐标轴负向一侧。的坐标轴负向一侧。 设视点位于设视点位于Z Z轴负向的无穷远处,平面多轴负向的无穷远处,平面多边形边形P P的方程为的方程为 AxBy十十CzD = 0 若对于平面多边形若对于平面多边形Q Q的任一顶点(的任一顶点(x xq q,y yq q,z zq q)均)均有有 AxqByqCzqD zmin(p),则,则p不仅可能部分遮不仅可能部分遮挡挡q,而且还可能部分地遮挡,而且还可能部分地遮挡Q Q中任何具有中任何具有zmax(qi) zmin(p)的平面多边形的平面多边形
10、qi。所有这样的平面多边。所有这样的平面多边形的集合记为形的集合记为Q。 如果对下面所有检测问题的回答是肯定如果对下面所有检测问题的回答是肯定的,那么的,那么p不遮挡不遮挡Q中任何多边形的任何部中任何多边形的任何部分,则分,则p写入帧缓冲器:写入帧缓冲器: 对对Q中每一中每一qi,第一步,检测,第一步,检测p和和qi的的包围盒是否在包围盒是否在x x方向分离?第二步,检测方向分离?第二步,检测p和和qi的包围盒是否在的包围盒是否在y方向分离?第三步,检测方向分离?第三步,检测p是是否全部位于否全部位于qi所在平面的背离视点的一侧?第所在平面的背离视点的一侧?第四步,检测四步,检测qi是否全部位
11、于是否全部位于p所在平面的靠近视所在平面的靠近视点的一侧?点的一侧? 若对若对中的四步检测有部分中的四步检测有部分qi的回答的回答是否定的,则是否定的,则p不能写入帧缓冲器,不能写入帧缓冲器,p可能与某可能与某些些qi有交叉有交叉遮挡关系(如图遮挡关系(如图7.137.13)。这时,可)。这时,可将将p p分割成两个以上部分并重新排序。分割成两个以上部分并重新排序。 pqr图图7.13 交叉覆盖平面多边形交叉覆盖平面多边形 2.2.去掉了去掉了p p或分割了或分割了p p之后的新之后的新S S重新按重新按1.1.进进行处理。行处理。 随着随着S S中未排序多边形个数的逐步减少和深度中未排序多边
12、形个数的逐步减少和深度优先级表中多边形个数的增加,当优先级表中多边形个数的增加,当S S中多边形个数中多边形个数为为0 0时循环结束。此时深度优先级表就建好了时循环结束。此时深度优先级表就建好了画家算法基本步骤画家算法基本步骤l生成深度优先级队列生成深度优先级队列l据视点距离据视点距离远远的多边形优先级低,排在队列的多边形优先级低,排在队列的前端的前端l据视点距离据视点距离近近的多边形优先级高,排在队列的多边形优先级高,排在队列的后端的后端 l从队列中依次取出多边形,从队列中依次取出多边形,计算其表面光亮度计算其表面光亮度l写入帧缓冲器写入帧缓冲器 l直到队列中所有多边形的光亮度都处理完毕直到
13、队列中所有多边形的光亮度都处理完毕画家算法优点:画家算法优点:l透明或半透明物体透明或半透明物体l图形的图形的动态显示动态显示l飞行训练模拟器中显示飞机着陆时的情景飞行训练模拟器中显示飞机着陆时的情景l场景中的物体是不变的,场景中的物体是不变的,只是视点在变化只是视点在变化l只要事先把不同视点的景物的优先级队只要事先把不同视点的景物的优先级队列算出列算出l再实时地采用画家算法来显示图形再实时地采用画家算法来显示图形l就可以实现图形的快速消隐与显示就可以实现图形的快速消隐与显示 7.2.3 深度缓冲器算法深度缓冲器算法( (Z缓冲区算法缓冲区算法) ) Z缓冲区算法缓冲区算法 它的基本思路是:对
14、于显示屏上的每一个它的基本思路是:对于显示屏上的每一个像素,记录下位于该像素内最靠近观察者的那像素,记录下位于该像素内最靠近观察者的那个景物面的深度坐标,同时相应记录下用来显个景物面的深度坐标,同时相应记录下用来显示该景物面的颜色(或灰度),那么所有记录示该景物面的颜色(或灰度),那么所有记录下的这些像素所对应的颜色就可以形成最后要下的这些像素所对应的颜色就可以形成最后要输出的图形。输出的图形。 为了记录下深度和颜色这两个参数,就为了记录下深度和颜色这两个参数,就需要定义两个数组:需要定义两个数组:一个是深度数组一个是深度数组-depth-depthm mnn另一个是颜色数组另一个是颜色数组-
15、colormn-colormn 深度缓冲器算法的基本步聚如下;深度缓冲器算法的基本步聚如下; 深度数组和颜色数组赋初值。深度数组和颜色数组赋初值。即对于显示即对于显示屏上的全部像素,置屏上的全部像素,置depthij = max;置;置colorij = bkcolor(背景色)。(背景色)。 对于景物中的每个多边形平面,计算出对于景物中的每个多边形平面,计算出该多边形平面的投影所包含的全部像素的位置,该多边形平面的投影所包含的全部像素的位置,然后对所包含的全部像素逐一做如下的两步工然后对所包含的全部像素逐一做如下的两步工作:作: A A计算出该多边形在对应于像素(计算出该多边形在对应于像素(
16、i i,j j)处)处的深度坐标值的深度坐标值Z Z; B比较此比较此Z值和原先深度数组所记录的值值和原先深度数组所记录的值depthij的大小。的大小。u若若Zdepthij,用当前的,用当前的z值去替换原先值去替换原先在在depthij中记录的值;然后置中记录的值;然后置colorij为为当前该多边形所表现的颜色值。当前该多边形所表现的颜色值。u反之,若反之,若zdepthij,两个数组存储的深,两个数组存储的深度值和颜色值均不须改变。度值和颜色值均不须改变。 for(场景中的每一个多边形)(场景中的每一个多边形) 扫描转换该多边形;扫描转换该多边形; for(多边形所覆盖的每一个像素点(
17、多边形所覆盖的每一个像素点(x,y)) 计算多边形在该像素点的深度值计算多边形在该像素点的深度值z(x,y); if(z(x,y) Z-buf中对应此像素点中对应此像素点(x,y)的的z值)值) 把多边形在把多边形在(x,y)处的深度值处的深度值z(x,y)存入深度数组;存入深度数组; 把多边形在把多边形在(x,y)处的亮度值存入颜色数组;处的亮度值存入颜色数组; 当所有的多边形都处理完后,帧缓冲器中的内容即当所有的多边形都处理完后,帧缓冲器中的内容即 为消除隐藏面后的图像为消除隐藏面后的图像深度缓冲器算法的优点深度缓冲器算法的优点l简单简单l无需对各景物表面片作深度预排序无需对各景物表面片作
18、深度预排序l易于硬件实现易于硬件实现l图形工作站上配置由硬件实现的深度缓冲器算法图形工作站上配置由硬件实现的深度缓冲器算法l很多微型机上都装有基于深度缓冲器算法的图形很多微型机上都装有基于深度缓冲器算法的图形加速卡加速卡深度缓冲器算法的缺点深度缓冲器算法的缺点l需要很大的存储空间需要很大的存储空间l在处理透明和半透明等效果方面存在困难,并由在处理透明和半透明等效果方面存在困难,并由此会产生巨大的处理时间开销此会产生巨大的处理时间开销改进一:减少需要相对测试的多边形平面数改进一:减少需要相对测试的多边形平面数l最小最大测试最小最大测试 不重叠不重叠,不可能互相遮蔽不可能互相遮蔽 测试无确定结果测
19、试无确定结果 对每条边进行对每条边进行最小最大最小最大测试测试XminXmaxl改进二:利用连贯性计算深度改进二:利用连贯性计算深度l水平方向水平方向l竖直方向竖直方向l改进三:降低对存储空间的需求改进三:降低对存储空间的需求l图像空间划分为图像空间划分为4、16甚至更多的子正方形或条甚至更多的子正方形或条状区域状区域l在最小情况下,只对应一条扫描线的深度缓冲器在最小情况下,只对应一条扫描线的深度缓冲器l扫描线相关算法扫描线相关算法7.2.4 扫描线算法扫描线算法 扫描线算法在实质上可以说是扫描线算法在实质上可以说是深度缓冲器算法的一种延伸。深度缓冲器算法的一种延伸。 假如我们在屏幕的分区中采
20、用仅在假如我们在屏幕的分区中采用仅在y方向方向细分,而在细分,而在x方向不分,那么整个显示屏幕将方向不分,那么整个显示屏幕将分成许多狭长的子区。分成许多狭长的子区。 如果在如果在y方向是以像素为单位细分,那么方向是以像素为单位细分,那么这样得到的每个子区就是一条线,我们称之为这样得到的每个子区就是一条线,我们称之为“扫描线扫描线”。 扫描线算法的基本思路是:当包含一条扫扫描线算法的基本思路是:当包含一条扫描线的水平平面(称为扫描线平面)与景物中描线的水平平面(称为扫描线平面)与景物中的立体相交时,组成立体的诸表面就会与该扫的立体相交时,组成立体的诸表面就会与该扫描线平面相交而形成若干条截交线段
21、,这些裁描线平面相交而形成若干条截交线段,这些裁交线段把整条扫描线分割成一些间隔交线段把整条扫描线分割成一些间隔xyz扫描线扫描线扫描线平面扫描线平面1 2 3 4 5xz图图7.16 扫描线算法扫描线算法 在扫描线上形成的间隔可以分为三类:在扫描线上形成的间隔可以分为三类: 不包含任何截交线段的间隔。对于这类不包含任何截交线段的间隔。对于这类间隔,就以背景色来显示该区域。间隔,就以背景色来显示该区域。 其中只包含有一条线段的间隔,很明显,其中只包含有一条线段的间隔,很明显,由于位在这类间隔内的线段是唯一的,因此必由于位在这类间隔内的线段是唯一的,因此必然是可见的,于是在这类间隔内的区域就应显
22、然是可见的,于是在这类间隔内的区域就应显示该线段所在表面的颜色。示该线段所在表面的颜色。 1 2 3 4 5xz 同时存在多条线段的间隔,在这种情同时存在多条线段的间隔,在这种情况下,需要经过计算和比较,在众多的线段中况下,需要经过计算和比较,在众多的线段中找出距离视点最近的那条线段,也就是找出距离视点最近的那条线段,也就是Z值最值最小的线段。然后在这类间隔的区域内,显示这小的线段。然后在这类间隔的区域内,显示这条处于最前面的线段所在表面的颜色。条处于最前面的线段所在表面的颜色。 1 2 3 4 5xz 算法从上至下地逐条处理扫描线,判别完算法从上至下地逐条处理扫描线,判别完所有扫描线平面内线
23、段的可见部分,并显示它所有扫描线平面内线段的可见部分,并显示它们,则立体的隐藏面也就得到了处理。们,则立体的隐藏面也就得到了处理。 7.2.5 区域细分算法区域细分算法 当窗口内只包含有一个多边形表面或者根当窗口内只包含有一个多边形表面或者根本就不包含任何多边形表面的时候,那么决定本就不包含任何多边形表面的时候,那么决定该窗口内显示的颜色值是相当简单的。该窗口内显示的颜色值是相当简单的。 但是当窗口内同时包含有几个相互交叉重但是当窗口内同时包含有几个相互交叉重叠的多边形表面时,输出情况的决定就变得相叠的多边形表面时,输出情况的决定就变得相对地复杂。对地复杂。 区域细分算法的基本思路是:对图形显区域细分算法的基本思路是:对图形显示屏幕采取递归细分的办法,以产生大小不示屏幕采取递归细分的办法,以产生大小不等的窗口,使得落在该窗口内的图形变得相等的窗口,使得落在该窗口内的图形变得相当简单以致于能够容易地决定其显示情况当简单以致于能够容易地决定其显示情况结束结束