- 3
- 0
- 约4.76千字
- 约 29页
- 2020-02-12 发布于江苏
- 举报
第十一讲 面消隐 ?基本概念 ?提高消隐算法效率的常见方法 ?画家算法 ?Z缓冲器算法 ?扫描线Z缓冲器算法 ?区域子分算法 ?光线投射算法 基本概念 产生真实感的方法之一: 反映三维场景中的相互遮挡关系 面消隐与线消隐 表面模型与线框模型 物体表面:平面与曲面 面消隐对象: 由平面多边形构成的多面体 基本概念 消隐算法的分类 1)类:以窗口内的每个像素为处理单元; for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表面的颜色来显示像素} 2)类:以场景中的物体为处理单元; for (场景中的每一个物体) { 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分; } 基本概念 算法复杂度 假设场景中有k个物体,平均每个物体表面由h个多边形构成,显示区域中有m x n个像素,则: 第一种算法的复杂度为:O(mnkh) 第二种算法的复杂度为:O((kh)*(kh)) 提高消隐算法效率的常见方法 利用连贯性 将透视投影转换成平行投影 包围盒技术 背面剔除 空间分割技术 物体分层表示 提高消隐算法效率的常见方法1 利用连贯性 物体连贯性 面的连贯性 区域连贯性 扫描线的连贯性 深度连贯性 提高消隐算法效率的常见方法2 将透视投影转换成平行投影 消隐与透视关系密切,体现有: 1)消隐必须在投影之前完成; 2)物体之间的遮挡关系与投影中心(视点)的选取有关; 3)物体之间的遮挡关系与投影方式有关 提高消隐算法效率的常见方法3 图12.3 加入面消隐步骤的三维图形显示流程图 p285 (参见图8.30 p162) 图12.4 先将透视投影转换成平行投影,南后再消隐 p285 (参见图8.33 p167)。 (避免除法,提高了效率) 提高消隐算法效率的常见方法4 包围盒技术 定义:一个形体的包围盒指的是包围它的简单形体。比如,… 该技术常用于: 避免盲目的求交测试; 各种物体间的比较等。 一个好的包围盒要具有两个条件: 包围和充分紧密包围着形体; 对其的测试比较简单。 例:使用矩形包围合及长方体包围合来提高算法效率… 提高消隐算法效率的常见方法5 背面剔除 外法向 外法向与投影方向(观察方向)的夹角 前向面与后向面(背面) 剔除依据: 物体表面是封闭的,背面总是被前向面所遮挡,从而始终是不可见的。 提高消隐算法效率的常见方法6 空间分割技术 依据:场景中的物体,它们的投影在投影平面上是否有重叠部分?(是否存在相互遮挡的可能?)对于根本不存在相互遮挡关系的物体,应避免这种不必要的测试。 方法:将投影平面上的窗口分成若干小区域;为每个小区域建立相关物体表,表中物体的投影于该区域有相交部分;则在小区域中判断那个物体可见时,只要对该区域的相关物体表中的物体进行比较即可。 提高消隐算法效率的常见方法6 复杂度比较: 不妨假定每个小区域的相关物体表中平均有h个物体,场景中有k个物体,由于物体在场景中的分布是分散的,显然h远小于k。根据第二种消隐方法所述,其算法复杂度为O(h*h),远小于O(k*k)。 提高消隐算法效率的常见方法7 物体分层表示 表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降低算法复杂度。 方法: 将父节点所代表的物体看成子节点所代表物体的包围盒,当两个父节点之间不存在遮挡关系时,就没有必要对两者的子节点做进一步测试。 父节点之间的遮挡关系可以用它们之间的包围盒进行预测试。 画家算法 由来:画家的作画顺序暗示出所画物体之间的相互遮挡关系 算法基本思路: 1)先将场景中的物体按其距观察点的远近进行排序,结果放在一张线性表中;(线性表构造: 距观察点远的称优先级低,放在表头;距观察点 近的称优先级高,放在表尾。该表称为深度优先级表) 2)然后按照从表头到表尾的顺序逐个绘制物体。 画家算法 关键:如何对场景中的物体按深度(远近)排序,建立深度优先级表? 一种针对多边形的排序算法如下: 假定在规范化投影坐标系uvn中,投影方向是n轴的负向,因而n坐标大距观察者近。记nmin(P) nmax(P)分别为多边形P的各个顶点n坐标的最小值和最大值,算法步骤如下: 画家算法 Step 1:将场景中所有多边形存入一个线性表(链表或数组)
原创力文档

文档评论(0)