计算机图形学06.ppt
《计算机图形学06.ppt》由会员分享,可在线阅读,更多相关《计算机图形学06.ppt(94页珍藏版)》请在三一办公上搜索。
1、,计算机图形学,Computer Graphics,使用班级:地信2009级 王增武 WangZTel:13518208752QQ:64434430,第六章 真实图形,6.1 线消隐6.2 面消隐光照模型光线跟踪表面图案与纹理6.3 颜色空间,为什么要消隐?,投影变换失去了深度信息,往往导致图形的二义性要消除二义性,就必须在绘制时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐。经过消隐得到的投影图称为物体的真实图形。,所以:如果想有真实感地显示三维物体,必须在视点确定之后,将对象表面上不可见的点、线、面消去。执行这种功能的算法,称为消隐算法。例如:,消隐的对象是三维物体。
2、消隐结果与观察物体有关,也与视点有关。线框图 消隐图 真实感图形,按消隐对象分类线消隐:消隐对象是物体上的边,消除的是物体上不可见的边。面消隐:消隐对象是物体上的面,消除的是物体上不可见的面。,第六章 真实图形,6.1 线消隐6.2 面消隐6.3 颜色空间,线段和多边形的关系有:线段与多边形的任何边均不相交。处理方法比较简单。线段与多边形相交。那么多边形的边把线段投影的参数区间0,1分割成若干子区间,每个子区间对应一条子线段(如下图所示),进一步判断各子线段的隐藏性。,线段投影被分为若干子线段,6.1 线消隐,可见子线段的确定,把各个子线段与所有需要比较的多边形依次进行隐藏性判别,记下各条隐藏
3、子线段的位置。最后,对这些区间进行求并集运算,即可确定总的隐藏子线段的位置,余下的则是可见子线段(右图),6.1 线消隐,第六章 真实图形,6.1 线消隐6.2 面消隐6.3 颜色空间,消隐算法的分类:第一类(图像空间的消隐算法):以窗口内的每个像素为处理单元;如Zbuffer、扫描线、Warnock算法。第二类(物体空间的消隐算法):以场景中的物体为处理单元;如光线投射算法。,6.2 面消隐,第一类(图像空间的消隐算法):以窗口内的每个像素为处理单元;for(窗口内的每一个像素)确定距视点最近的物体,以该物体表面的颜色来显示像素,6.2 面消隐,假设场景中有k个物体,平均每个物体表面由h个多
4、边形构成,显示区域中有m x n个像素,则:算法的复杂度为:O(mnkh),6.2 面消隐,第二类(物体空间的消隐算法):以场景中的物体为处理单元;for(场景中的每一个物体)将其与场景中的其它物体比较,确定其表面的可见部分;显示该物体表面的可见部分;,6.2 面消隐,假设场景中有k个物体,平均每个物体表面由h个多边形构成,显示区域中有m x n个像素,则:算法的复杂度为:O(kh)*(kh),6.2 面消隐,提高消隐算法效率的常见方法,利用连贯性将透视投影转换成平行投影包围盒技术背面剔除空间分割技术物体分层表示,提高消隐算法效率的常见方法1,利用连贯性:相邻事物的属性之间有一定的连贯性,其属
5、性值通常是平缓过渡的,如颜色值、空间位置关系等。物体连贯性面的连贯性区域连贯性扫描线的连贯性深度连贯性,提高消隐算法效率的常见方法1,物体连贯性:如果物体A与物体B是完全相互分离的,则在消隐时,只需比较A、B两物体之间的遮挡关系就可以了,无须对它们的表面多边形逐一进行测试。例如,若A距视点较B远,则在测试B上的表面的可见性时,无须考虑A的表面。面的连贯性:一张面内的各种属性值一般都是缓慢变化的,允许采用增量形式对其进行计算。区域连贯性:区域指屏幕上一组相邻的像素,它们通常为同一个可见面所占据,可见性相同。区域连贯性表现在一条扫描线上即为扫描线上的每个区间内只有一个面可见。,提高消隐算法效率的常
6、见方法1,扫描线的连贯性:相邻两条扫描线上,可见面的分布情况相似。深度连贯性:同一表面上的相邻部分深度是相近的,而占据屏幕上同一区域的不同表面的深度不同。这样在判断表面间的遮挡关系时,只需取其上一点计算出深度值,比较该深度值即可得到结果。,提高消隐算法效率的常见方法2,将透视投影转换成平行投影 消隐与透视关系密切,体现在:1)消隐必须在投影之前完成;2)物体之间的遮挡关系与投影中心(视点)的选取有关;3)物体之间的遮挡关系与投影方式有关,提高消隐算法效率的常见方法3,包围盒技术定义:一个形体的包围盒指的是包围它的简单形体。一个好的包围盒要具有两个条件:包围和充分紧密包围着形体;对其的测试比较简
7、单。,提高消隐算法效率的常见方法3,应用避免盲目求交例如:两个空间多边形A、B在投影平面上的投影分别为A,B,因为A、B的矩形包围盒不相交,则A、B不相交,无须进行遮挡测试。右下图:包围盒相交,投影也相交;包围盒相交,投影不相交。,提高消隐算法效率的常见方法4,背面剔除 外法向:规定每个多边形的外法向都是指向物体外部的。前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝角,称为前向面。后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐角,称为后向面(背面)。剔除依据:背面总是被前向面所遮挡,从而不可见。,提高消隐算法效率的常见方法4,前向面 后向面 多面体的隐藏线消除图中的JEAF
8、、HCBG和DEABC所在的面均为后向面。其它为前向面。,提高消隐算法效率的常见方法5,空间分割技术依据:场景中的物体,它们的投影在投影平面上是否有重叠部分?(是否存在相互遮挡的可能?)对于根本不存在相互遮挡关系的物体,应避免这种不必要的测试。方法:将投影平面上的窗口分成若干小区域;为每个小区域建立相关物体表,表中物体的投影于该区域有相交部分;则在小区域中判断那个物体可见时,只要对该区域的相关物体表中的物体进行比较即可。,提高消隐算法效率的常见方法5,复杂度比较:不妨假定每个小区域的相关物体表中平均有h个物体,场景中有k个物体,由于物体在场景中的分布是分散的,显然h远小于k。根据第二种消隐方法
9、所述,其算法复杂度为O(h*h),远小于O(k*k)。,提高消隐算法效率的常见方法6,物体分层表示表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降低算法复杂度。,提高消隐算法效率的常见方法6,方法:将父节点所代表的物体看成子节点所代表物体的包围盒,当两个父节点之间不存在遮挡关系时,就没有必要对两者的子节点做进一步测试。父节点之间的遮挡关系可以用它们之间的包围盒进行预测试。,主要算法:画家算法Z缓冲器算法扫描线Z缓冲器算法,6.2 面消隐,画家算法 1972年M.E.Newell受画家由远至近作画的启发景物空间消隐算法,画家算法(列表优先算法),由来:画家的作画顺序暗示出所
10、画物体之间的相互遮挡关系算法基本思想:1)先把屏幕置成背景色2)先将场景中的物体按其距观察点的远近进行排序,结果放在一张线性表中;(线性表构造:距观察点远的称优先级低,放在表头;距观察点近的称优先级高,放在表尾。该表称为深度优先级表)3)然后按照从远到近(从表头到表尾)的顺序逐个绘制物体。关键:如何对场景中的物体按深度(远近)排序,建立深度优先级表?一种针对多边形的排序算法如下:,画家算法(列表优先算法),Step 1:将场景中所有多边形存入一个线性表,记为L;Step 2:如果L中仅有一个多边形,算法结束;否则根据每个多边形的Zmin对它们预排序。不妨假定多边形P落在表首,即Zmin(P)为
11、最小。再记Q为L P(表中其余多边形)中任意一个;Step 3:判别P,Q之间的关系,有如下二种:(1):对所有的Q,有Zmax(P)Zmin(Q),需进一步判别:,画家算法(列表优先算法),A)若P,Q的投影P,Q的包围盒不相交(图a),则P,Q在表中的次序不重要,令L=L P,返回step 2;否则进行下一步。,画家算法(列表优先算法),B)若P的所有顶点位于Q所在平面的不可见的一侧(图b),则P,Q关系正确,令L=L P,返回step 2;否则进行下一步。,画家算法(列表优先算法),C)若Q的所有顶点位于P所在平面的可见的一侧(图c),则P,Q关系正确,令L=L P,返回step 2;否
12、则进行下一步。,画家算法(列表优先算法),D)对P,Q投影P,Q求交,若P,Q不相交(图d),则P,Q在表中的次序不重要,令L=L P,返回step 2;否则在它们所相交的区域中任取一点,计算P,Q在该点的深度值,如果P的深度小,则P,Q关系正确,令L=L P,返回step 2;否则交换P,Q,返回step 3.,画家算法,本算法不能处理的情况:多边形循环遮挡多边形相互穿透 解决办法:分割成两个,Z-Buffer算法,由来:帧缓冲器 保存各像素颜色值 Z缓冲器-保存各像素处物体深度值 Z缓冲器中的单元与帧缓冲器中的单元一一对应,Z-Buffer算法,思想:先将Z缓冲器中个单元的初始值置为最小值
13、。当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。,Z-Buffer算法-算法描述,帧缓存全置为背景色深度缓存全置为最小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
14、)处,需要计算的像素深度值次数=多边形个数*多边形平均占据的像素个数,Z-Buffer算法,Z缓冲器算法是所有图像空间算法中最简单的一种隐藏面消除算法。它在象素级上以近物取代远物,与形体在屏幕上的出现顺序无关。优点:1)简单稳定,利于硬件实现 2)不需要整个场景的几何数据缺点:1)需要一个额外的Z缓冲器 2)在每个多边形占据的每个像素处都要计算深度值,计算量大,Z-Buffer算法-改进算法,只用一个深度缓存变量zb的改进算法。一般认为,Z-Buffer算法需要开一个与图象大小相等的缓存数组ZB,实际上,可以改进算法,只用一个深度缓存变量zb。,Z-Buffer算法-改进算法过程,帧缓存全置为
15、背景色for(屏幕上的每个象素(i,j)深度缓存变量zb置最小值MinValue for(多面体上的每个多边形Pk)if(象素点(i,j)在pk的投影多边形之内)计算Pk在(i,j)处的深度值depth;if(depth大于zb)zb=depth;indexp=k;if(zb!=MinValue)在交点(i,j)处用多边形Pindexp的颜色显示,Z-Buffer算法-改进算法,关键问题:判断象素点(i,j)是否在多边形Pk的投影多边形之内计算多边形Pk在点(i,j)处的深度。设多边形Pk的平面方程为:,扫描线Z-buffer算法,由来:Z缓冲器算法中所需要的Z缓冲器容量较大,为克服这个缺点可
16、以将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样Z缓冲器的单元数只要等于一个区域内像素的个数就可以了。如果将小区域取成屏幕上的扫描线,就得到扫描线Z缓冲器算法。,扫描线Z-buffer算法,算法思想:在处理当前扫描线时,开一个一维数组作为当前扫描线的Z-buffer。首先找出与当前扫描线相关的多边形,以及每个多边形中相关的边对。对每一个边对之间的小区间上的各象素,计算深度,并与Z-buffer中的值比较,找出各象素处可见平面。写帧缓存。采用增量算法计算深度。,扫描线Z-buffer算法,for(v=0;v Z缓冲器的第u单元的值)置帧缓冲器的第(u,v)单元值为当前多边形颜
17、色;置Z缓冲器的第u单元值为d;/处理下一条扫描线,扫描线Z-buffer算法,改进之一:将窗口分割成扫描线Z缓冲器的单元数只要等于一条扫描线内像素的个数就可以了。,扫描线Z-buffer算法,改进之二:采用多边形分类表、活性多边形表避免多边形与扫描线的盲目求交,扫描线Z-buffer算法,改进之三:利用边、边的分类表、边对、活化边对表避免边与扫描线的盲目求交,扫描线Z-buffer算法,改进之四:利用连贯性计算深度水平方向:当沿扫描线u递增一个像素时,多边形所在平面n坐标的增量,对方程au+bv+cn+d=0来说,nu=-a/c 竖直方向nv:当沿扫描线v递增一个像素时,多边形所在平面n坐标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 06

链接地址:https://www.31ppt.com/p-4536273.html