第7章消隐
第7章 消隐
第7章消隐 71基本概念 71.1消隐的定义 如果要使一幅图有较强的立体感 必须在视点确定之后,将对象的隐藏线 (面)消去,这一过程称为消隐;执行这 功能的算法,称为消隐算法。 经过消隐得到的图形称为物体的 消隐图形
第7章 消隐 7.1 基本概念 ▪ 7.1.1 消隐的定义 ▪ 如果要使一幅图有较强的立体感, 必须在视点确定之后,将对象的隐藏线 (面)消去,这一过程称为消隐;执行这 一功能的算法,称为消隐算法。 ▪ 经过消隐得到的图形称为物体的 消隐图形
第7章消隐 71.2消隐的分类 从消隐的对象,或者从应用的角 度来分类: (1)线消隐 (2)面消隐 从消隐的空间来分类: (1)物体空间的消隐 (2)图像空间的消隐
第7章 消隐 ▪ 7.1.2 消隐的分类 ▪ 从消隐的对象,或者从应用的角 度来分类: ▪ (1)线消隐 ▪ (2)面消隐 ▪ 从消隐的空间来分类: ▪ (1)物体空间的消隐 ▪ (2)图像空间的消隐
第7章消隐 71.3消隐算法的基本原则 1.排序 2.连贯性 物体连贯性 面(边)连贯性 扫描线连贯性 深度连贯性
第7章 消隐 ▪ 7.1.3 消隐算法的基本原则 ▪ 1.排序 ▪ 2.连贯性 ▪ 物体连贯性 ▪ 面(边)连贯性 ▪ 扫描线连贯性 ▪ 深度连贯性
第7章消隐 72画家算法 7.2.1算法的基本思想 基本思想 (1)先把屏幕置成背景色; (2)将物体的各个面按其距观察点的远近 进行排序,结果放在一张深度优先级表中;(深 度优先级表是一个线性表,距观察点远的多边形 优先级低,将之放在表头;距观察点近的多边形 优先级高,将之放在表尾。 (3)按照从表头到表尾(从远到近)的顺 序逐个取出多边形,投影到屏幕上并显示
第7章 消隐 7.2 画家算法 ▪ 7.2.1 算法的基本思想 ▪ 基本思想: ▪ (1)先把屏幕置成背景色; ▪ (2)将物体的各个面按其距观察点的远近 进行排序,结果放在一张深度优先级表中;(深 度优先级表是一个线性表,距观察点远的多边形 优先级低,将之放在表头;距观察点近的多边形 优先级高,将之放在表尾。) ▪ (3)按照从表头到表尾(从远到近)的顺 序逐个取出多边形,投影到屏幕上并显示
第7章消隐 7.2.2深度优先级表的建立 当两个多边形P和Q交叉在一起时,要 进行对多边形的排序。 假设多边形的乙范围是平面z=zmm和 z=zmax之间的区域,所以,zmin是所有多边形顶 点的最小z值,zma是所有多边形顶点的最大z值 与此类似定义多边形的x和y范围,则将X、y和z 范围的交集称为多边形的范围或包围盒。在投影 坐标系XYZ中,投影方向是Z轴的负方向,因此 z值大者离观察点更近。记Zmin(P)、Zmax(P)分别 人多边的夂个而从标的最小最估
第7章 消隐 ▪ 7.2.2 深度优先级表的建立 ▪ 当两个多边形P和Q交叉在一起时,要 进行对多边形的排序。 ▪ 假设多边形的z范围是平面z=zmin和 z=zmax之间的区域,所以,zmin是所有多边形顶 点的最小z值,zmax是所有多边形顶点的最大z值。 与此类似定义多边形的x和y范围,则将x、y和z 范围的交集称为多边形的范围或包围盒。在投影 坐标系XYZ中,投影方向是Z轴的负方向,因此 z值大者离观察点更近。记zmin(P)、zmax(P)分别 为多边形P的各个顶点z坐标的最小值与最大值
第7章消隐 第一步:将场景中所有多边形存入一个线性表 (数组或链表)中,记为L; 第二步:如果L中仅有一个多边形,算法结束 否则,根据每个多边形的zmm对它们预排序。不 妨假定多边形P落在表首,即zmin(P)为最小。再 记Q为L-{P}(表中其余多边形)中任意一个; 第三步:判别P,Q之间的关系,有如下二种: (1)如果对所有的Q,有zmax(P)<zmn(Q),则多 边形P的确距观察点最远,它不可能遮挡别的多 边形。令L=L-{},返回第二步;
第7章 消隐 ▪ 第一步:将场景中所有多边形存入一个线性表 (数组或链表)中,记为L; ▪ 第二步:如果L中仅有一个多边形,算法结束; ▪ 否则,根据每个多边形的zmin对它们预排序。不 妨假定多边形P落在表首,即zmin(P)为最小。再 记Q为L – {P}(表中其余多边形)中任意一个; ▪ 第三步:判别P,Q之间的关系,有如下二种: ▪ (1)如果对所有的Q,有zmax(P)<zmin(Q),则多 边形P的确距观察点最远,它不可能遮挡别的多 边形。令L = L – {P}, 返回第二步; ▪ (2)如果存在某一个多边形Q,使
第7章消隐 ①若P、Q的投影P、Q的包围盒不相交,则P Q在表中的次序不重要,令L=L-{P},返回第 步;否则进行下 步 ②若P的所有顶点位于Q所在平面的不可见的 前的P、Q关系正确,令L=L-{P} 返回第二步;否则进行下一步 ③若Q的所有顶点位于P所在平面的可见的一侧, 则当前的P、Q关系正确,令L=L一{P},返回第 步;否则进 步 ④对P、Q的投影P、Q求交,若P、Q不相交 P、Q在表中的次序不重要,令L=L-{P}, 返回第二步; 否则,在它们所相交的区域中任取一点,计
第7章 消隐 ▪ ① 若P、Q的投影P’、Q’的包围盒不相交,则P、 Q在表中的次序不重要,令L = L – {P},返回第 二步;否则进行下一步。 ▪ ② 若P的所有顶点位于Q所在平面的不可见的一 侧,则当前的P、Q关系正确,令L = L – {P}, 返回第二步;否则进行下一步。 ▪ ③ 若Q的所有顶点位于P所在平面的可见的一侧, 则当前的P、Q关系正确,令L = L – {P},返回第 二步;否则进行下一步。 ▪ ④ 对P、Q的投影P’、Q’求交,若P’、Q’不相交, 则P、Q在表中的次序不重要,令L = L – {P}, 返回第二步; ▪ 否则,在它们所相交的区域中任取一点,计 算P、Q在该点的深度值,如果P的深度小,则P、 关系正确,令 ,返回第二步;
第7章消隐 73乙缓冲区(2Buer)算法 7.3.1算法的基本思想 基本思想:先将FB(帧缓冲区,用于 存贮各像素点的颜色和亮度值)中全部存放背景 色,ZB(深度缓冲区,用于存贮对应于该像素 点的z座标值)中所有单元的初始值置为最小值。 在把显示对象的每个面上每一点的属性(颜色或 灰度)值填入帧缓冲区相应单元前,要把这点的 z坐标值和ZB中相应单元的值进行比较,检查当 前多边形的深度值是否大于该像素原来的深度值 如果大于,说明当前多边形更靠近观察点,用 的颜色替换像素原来的颜色,同时ZB中相应单 元的值也要改成这点的z坐标值:;否则,说明在
第7章 消隐 7.3 Z缓冲区(Z-Buffer)算法 ▪ 7.3.1 算法的基本思想 ▪ 基本思想:先将FB(帧缓冲区,用于 存贮各像素点的颜色和亮度值)中全部存放背景 色,ZB(深度缓冲区,用于存贮对应于该像素 点的z座标值)中所有单元的初始值置为最小值。 在把显示对象的每个面上每一点的属性(颜色或 灰度)值填入帧缓冲区相应单元前,要把这点的 z坐标值和ZB中相应单元的值进行比较,检查当 前多边形的深度值是否大于该像素原来的深度值。 如果大于,说明当前多边形更靠近观察点,用它 的颜色替换像素原来的颜色,同时ZB中相应单 元的值也要改成这点的z坐标值;否则,说明在 当前像素处,当前多边形被前面所绘制的多边形
第7章消隐 7.3.2算法的描述 i forXZB(, y)) 用z(xXy)替换ZB(xy)的值; 用多边形在(xy)处的颜色值替换FB(X,y) 的值;
第7章 消隐 ▪ 7.3.2 算法的描述 ▪ { for(xZB(x,y)) ▪ { 用z(x,y)替换ZB(x,y)的值; ▪ 用多边形在(x,y)处的颜色值替换FB(x,y) 的值; ▪ } } } }