《教育学消隐》ppt课件

上传人:tia****nde 文档编号:70553549 上传时间:2019-01-17 格式:PPT 页数:60 大小:1.18MB
返回 下载 相关 举报
《教育学消隐》ppt课件_第1页
第1页 / 共60页
《教育学消隐》ppt课件_第2页
第2页 / 共60页
《教育学消隐》ppt课件_第3页
第3页 / 共60页
《教育学消隐》ppt课件_第4页
第4页 / 共60页
《教育学消隐》ppt课件_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《《教育学消隐》ppt课件》由会员分享,可在线阅读,更多相关《《教育学消隐》ppt课件(60页珍藏版)》请在金锄头文库上搜索。

1、1,第10章 隐藏面的消除 (Hidden-Surface Removal),2,第10章 隐藏面的消除,基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,3,本章目标,消隐的基本概念 重点掌握Z缓冲器(Buffer)消隐算法 学会使用OpenGL的函数,4,问题 投影变换失去了深度信息,往往导致图形的二义性及失去遮挡关系 要消除二义性和保持遮挡关系,就必须在绘制(投影)时消除被遮挡的不可见的线或面,习惯上称作消除隐藏线和隐藏面,简称为消隐,失去遮挡关系,长方体线框投影图的二义性,10.1 基本概念,5,消隐的对象

2、 三维物体 三维体的表示主要采用边界(多边形)表示 消隐结果 与观察物体有关,也与视点位置和方向有关,线框图 消隐图 真实感图形,10.1 基本概念,6,消隐分类 消除隐藏面:确定可见面(消除不可见面)表面表示物体(本章讨论) 消除隐藏线:消除不可见线线框表示物体,长方体线框投影图的二义性,失去遮挡关系,10.1 基本概念,7,面消隐算法分类 投影窗口内的像素为处理单元。确定最近点 for (窗口内的每一个像素) 确定距视点最近的物体,以该物体表面的颜色来显示像素 ,图像空间image-space,10.1 基本概念,8,面消隐算法分类(续) 场景中的物体为处理单元。物体上的面是否最近,for

3、 (场景中的每一个物体) 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分; ,场景空间object-space,10.1 基本概念,9,第10章 隐藏面的消除,基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,10,10.2 提高消隐算法效率的常用方法,主要技术 1. 利用连贯性 相邻物体的属性之间有一定的连贯性,其属性值通常是平缓过渡的,如颜色值、空间位置关系等 包括: 物体连贯性 面的连贯性 区域连贯性 扫描线连贯性 深度连贯性,11,10.2 提高消隐算法效率的常用方法,(1)物

4、体连贯性:如果物体 A 与物体 B 是完全相互分离的,则在消隐时,只需比较A、B 两物体之间的遮挡关系,无须对它们的表面多边形逐一进行测试。例如,若 A 距视点较 B 远,则在测试 B 上的表面的可见性时,无须考虑 A 的表面 (2)面的连贯性:一张面内的各种属性值一般都是缓慢变化的,允许采用增量形式对其进行计算,12,10.2 提高消隐算法效率的常用方法,(3)区域连贯性:区域指屏幕上一组相邻的像素,它们通常为同一个可见面所占据,可见性相同。区域连贯性表现在一条扫描线上时,即为扫描线上的每个区间内只有一个面可见 (4)扫描线的连贯性:相邻两条扫描线上,可见面的分布情况相似 (5)深度连贯性:

5、同一表面上的相邻部分深度是相近的,而占据屏幕上同一区域的不同表面的深度不同。这样在判断表面间的遮挡关系时,只需取其上一点计算出深度值,比较该深度值便能得出结果,13,10.2 提高消隐算法效率的常用方法,2. 透视投影转换为平行投影 消隐在投影前完成 物体间的遮挡关系与投影中心相关 物体间的遮挡关系与投影方式相关,14,10.2 提高消隐算法效率的常用方法,3. 包围盒技术 定义:一个形体的包围盒指的是包围它的简单形体 两个条件 包围盒充分紧密包围着形体 对其的测试比较简单 主要包围盒 长方体 正方体 球,15,10.2 提高消隐算法效率的常用方法,作用避免盲目求交 例如:两个空间多边形A、B

6、在投影平面上的投影分别为A,B ,因为A 、B 的矩形包围盒不相交,则A、B 不相交,无须进行遮挡测试。 如果包围盒相交,需进一步测试。右下图(a)包围盒相交,投影也相交;(b)包围盒相交,投影不相交 一般情况下,判断两物体是否遮挡时,前一种情况大量存在,避免了物体间的复杂相交测试。,16,10.2 提高消隐算法效率的常用方法,4. 背面剔除 外法向:规定每个多边形的外法向都是指向物体外部的 前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝角,称为前向面 后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐角,称为后向面(背面),夹角为180u,投影方向,17,10.2 提高消隐算

7、法效率的常用方法,剔除依据:背面总是被前向面所遮挡,从而不可见,前向面 后向面,JEAF、HCBG、JIHGF为后向面,C,G,N,V,n,V,n,18,10.2 提高消隐算法效率的常用方法,5. 空间分割技术 遮挡判断依据:场景中的物体,它们的投影在投影平面上是否有重叠部分?(是否存在相互遮挡的可能?)对于根本不存在相互遮挡关系的物体,应避免这种不必要的测试 原因:物体在场景中分散,有些物体的投影相距甚远,不会存在遮挡关系 方法:将投影平面上的窗口分成若干小区域;为每个小区域建立相关物体表,表中物体的投影于该区域有相交部分;则在小区域中判断那个物体可见时,只要对该区域的相关物体表中的物体进行

8、比较,19,10.2 提高消隐算法效率的常用方法,6. 物体的分层表示 表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降低算法复杂度,20,方法: 将父节点所代表的物体看成子节点所代表物体的包围盒,当两个父节点之间不存在遮挡关系时,就没有必要对两者的子节点做进一步测试。父节点之间的遮挡关系可以用它们之间的包围盒进行预测试,10.2 提高消隐算法效率的常用方法,21,第10章 隐藏面的消除,基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,22,背景 画家作画:先画远景后画近景 画家的作画顺序暗

9、示出所画物体之间的相互遮挡关系,10.3 画家算法,23,算法基本思想: 1)先把屏幕置成背景色 2)将场景中的物体按其距观察点的远近进行排序,结果放在一张线性表中;(线性表构造:距观察点远的称优先级低,放在表头;距观察点近的称优先级高,放在表尾。该表称为深度优先级表) 3)然后按照从远到近(从表头到表尾)的顺序逐个绘制物体。 关键 如何对场景中的物体按深度(远近)排序,建立深度优先级表?,10.3 画家算法,24,多边形的排序算法* 1)将场景中所有多边形存入一个线性表,记为L; 2)如果L中仅有一个多边形,算法结束;否则根据每个多边形的nmin 对它们预排序。不妨假定多边形P落在L的表首,

10、即nmin(P) 为最小。再记 Q 为 L P (表中其余多边形)中任意一个; 3)判别P, Q之间的关系,有如下二种: (1)对所有的Q,有nmax(P) nmin (Q),需进一步判别:,10.3 画家算法,在规范投影坐标系里 uvn 中,投影方向是 n 轴的负方向,因而 n 坐标大者距观察者更近。nmin(P)和 nmax(P) 分别为 P 各顶点 n 坐标的最小和最大值。投影为正平行投影,25,(A)若P, Q的投影 P, Q 的包围盒不相交(图a),则P, Q 在表中的次序不重要,令L = L P , 返回2);否则进行下一步 (B)若 P 的所有顶点位于 Q 所在平面的不可见的一侧

11、(图b) ,则P, Q关系正确,令L = L P, 返回 2);否则进行下一步,10.3 画家算法,26,(C)若Q的所有顶点位于 P 所在平面的可见的一侧(图c),则P, Q关系正确,令L = L P , 返回2);否则进行下一步 (D)对P, Q投影P, Q求交,若P, Q不相交(图d),则P, Q在表中的次序不重要,令L = L P , 返回 2); 否则在它们所相交的区域中任取一点,计算 P, Q在该点的深度值,如果 P 的深度小,则P, Q关系正确,令L = L P , 返回 2);否则交换P, Q, 返回3),10.3 画家算法,27,问题* 不能处理多边形循环遮挡和多边形相互穿透

12、 解决方法:分割,10.3 画家算法,28,第10章 隐藏面的消除,基本概念 提高消隐算法效率的常用方法 画家算法 Z-Buffer(缓冲器)算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,29,又称 ZBuffer算法(深度缓冲 depth-buffer) 组成: 帧缓冲器 - 保存各像素颜色值 Z 缓冲器 - 保存各像素处物体深度值,10.4 Z 缓冲器算法,Z 缓冲器中的单元与帧缓冲器中的单元一一对应,30,算法 (1)先将 Z 缓冲器中个单元的初始值置为最小值。 (2)多边形投影时,当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度

13、值(保存在该像素所对应的Z缓冲器的单元中), A:如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;同时保存深度值 B:否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变,10.4 Z缓冲器算法,31,算法伪码 帧缓存全置为背景色; 深度缓存全置为最小 Z 值; for(每一个多边形) for(该多边形所覆盖的每个像素(x, y) ) 计算该多边形在该像素的深度值 Z(x, y); if ( Z(x, y)大于Z缓存在(x, y)的值) 把 Z(x, y)存入 Z 缓存中(x, y)处; 把多边形在(x, y)处的颜色值存入帧缓存的(x

14、, y)处; ,10.4 Z缓冲器算法,32,特点 Z 缓冲器算法是所有图像空间算法中最简单的一种隐藏面消除算法。在像素级上以近物取代远物,与形体在屏幕上的出现顺序无关。 优点 1)简单稳定,利于硬件实现 2)不需要整个场景的几何数据 缺点 1)需要一个额外的 Z 缓冲器 2)每个多边形占据的每个像素处都要计算深度值, 计算量大,10.4 Z缓冲器算法,33,基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,第10章 隐藏面的消除,34,由来 Z 缓冲器算法中所需要的 Z 缓冲器容量较大,为克服这个缺点,可以将整个

15、绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样 Z 缓冲器的单元数只要等于一个区域内像素的个数 如果将小区域取成屏幕上的扫描线,就得到扫描线 Z 缓冲器算法,10.5 扫描线Z缓冲器算法,35,算法思想 在处理当前扫描线时,用一个一维数组作为当前扫描线的Z-buffer。首先找出与当前扫描线相关的多边形,以及每个多边形中相关的边对。 对每一个边对之间的小区间上的各像素,计算深度,并与Z-buffer中的值比较,找出各像素处可见平面。(采用增量算法计算深度) 写帧缓存。,10.5 扫描线Z缓冲器算法,36,算法(p291)*,for ( v= 0;v Z缓冲器的第u单元的值) 置帧

16、缓冲器的第(u,v)单元值为当前多边形颜色; 置Z缓冲器的第u单元值为d; /处理下一条扫描线,10.5 扫描线Z缓冲器算法,37,缺点 在每一个被多边形覆盖像素处需要计算深度值 被多个多边形覆盖的像素需要多次计算深度值,10.5 扫描线Z缓冲器算法,38,第10章 隐藏面的消除,基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数,39,比较 与Z-Buffer算法相比,扫描线Z算法有了很大改进,比如所需的Z-Buffer大大减小,计算深度利用了面连贯性等 缺点:每个像素处都计算深度值,甚至不止一次的计算,运算量仍然很大

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号