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