计算机图形学 10、隐藏面的消除
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
每个多边形顶点中,最大的纵坐标z值用zmax表示, 最小的纵坐标n值用zmin表示; 根据每个多边形的zmin对它们进行预排序,并放入 优先级表中;这样大部分多边形都是按照远近关 系得到排序,但有少量特例例外。
视线 例外 n
3.画家算法
为了排除例外,需要逐个判断多边形之间 的远近关系。 设P是在优先级表中排列第一的多边形,Q 为任意一个其他多边形。 Q与P进行比较。
平面法矢
4.Z缓冲器算法
画家算法需要对多边形排序,计算量大 Z缓冲器算法简单稳定,利于硬件实现。 Z缓冲器是一组存储单元,其单元个数与屏 幕上的像素个数相同,与帧缓冲器(显存) 单元个数相同。它们三者存在一一对应的 关系。
4.Z缓冲器算法
Z缓冲器算法为每一个要填入的像素,不光准备颜 色值,还准备一个深度值。 屏幕上像素的显示颜色由对应的帧缓冲器单元中 的数值决定,该像素对应的z值存储在Z缓冲器对 应单元中。 有多个空间物体对应同一个显示像素。一个颜色 值是否能填入显示缓冲器像素,取决于该颜色值 所对应的深度值是否大于当前缓冲器中的深度值。
基本概念与基本方法
前面的平面不一定遮挡或完全遮挡后面的平面, 这样就要将不被遮挡的部分显示出来。
• 判断两个物体是否相互遮挡,可以在物体投影 到窗口平面后,用物体投影的边界盒是否相交 来判断
基本概念与基本方法
每个物体,只有前向面才可能显示出来; 后向面绝无显示的可能,后向面是被物体 本身所遮挡。 在面消隐时,只需要考虑前向面的相互遮 挡;对于后向面,不需要考虑,这可以大 大减少计算量。 前向面在数学上的特征是外法向与视线方 向成钝角,后向面则是成锐角。
1 4
6.区域子分算法
1.
所有的多边形与窗口的关系确定以后,有 些情况下就可以确定颜色了: 所有多边形与窗口分离,窗口填上背景色;
6.区域子分算法
2.
只有一个多边形与窗口相交或包含在窗口 内,先对窗口填上背景色,再运用多边形 扫描线方法对多边形内部填上该多边形的 颜色;
6.区域子分算法
3.
离观测者最近的多边形包围了窗口,对窗 口填上该多边形的颜色。
第九章 真实图形
三维世界中的物体之间存在遮挡关系。 为了真实表现三维场景,必须体现出这种遮挡关 系。 三维物体的三种模型:线框模型,表面模型,实 体模型。 线框模型:涉及隐藏线的消隐。 表面模型:涉及隐藏面的消隐。 实体模型:只需考虑实体表面的问题,与表面模 型相似
基本概念与基本方法
2.曲面隐藏线消除
T1T2T3…………………Tk………………………..……………Tn Top数组
B1B2B3…………………Bk………………………..……………Bn Bottom 数组
3.画家算法
算法的基本思想是:先将场景中的物体按 其距观察点的远近进行排序,排序结果存 在一张深度优先表中。距观察点远者称其 优先级低,放在表头;距观察点近者称其 优先级高,放在表尾。按照从表头到表尾 的顺序逐个绘制物体,近的物体后画,覆 盖了先画的远的物体,产生了正确的遮挡 关系。
3.画家算法
zmin(Q) zmax(P)
若zmax(P)<zmin(Q) , P 确实是比Q距离视线更 远。 Q在P的前向面, P确 实是比Q距离视线更远。 Q在P的后向面, P比Q 距离视线更近,需要交 换P、Q的位置。
视线
z轴
前向
后向
视线
3.ቤተ መጻሕፍቲ ባይዱ家算法
前、后向面判别方法: 平面上任意一点与另一平 面任意顶点作一连线,平 面的法线矢量与该连线的 夹角小于90度,那个平面 位于该平面的前向面一边; 否则位于后向面一边。
2.曲面隐藏线消除
2.曲面隐藏线消除
1.
2.
不做消隐的绘制方法 将每一行(列)的数据看作空间点(x,y,z)依次投影到投 影平面得到投影点(xp,yp) 将各个投影点依次连接起来的
2.曲面隐藏线消除
1.
2.
3.
4.
做消隐的绘制方法 绘制空间点连线的方法同前一种方法,只是绘制次序有 规定 绘制次序是按照距离视点的远近,从近到远依次绘制 为了只绘制未被遮挡的曲线部分,设置一个高度记录器, 依次记录已绘制的最高点值yp值 只有超出高度记录器的曲线部分被绘制,并且其高度值 yp值代替原有的高度值记录进记录器
3.画家算法
u
视线方向
v 4
3
2 4 3 2 1
1 n
优先级表
绘图顺序
3.画家算法
用三维包围盒确定能够投影到窗口的空间 范围,除去包围盒以外的物体。 每个物体去除后向面,只剩下前向面,每 个前向面用多边形顶点表示。 画家算法的关键和难点在于如何对多边形 按远近进行排序。
3.画家算法
Z 投影线
Zmin线 Zmax体
Y
减少计算量的方法
投影面中,二维边界盒不相交,不可能形成遮挡 关系 用二维边界盒判断: xmin1> xmax2 或xmin2> xmax1 或ymin1> ymax2 或ymin2> ymax1 y
x
减少计算量的方法
后向面(自隐藏面)可以全部去掉。 后向面:面的外法线方向与Z轴成钝角 其它的面都是可能的遮挡面
面消隐算法的基本思想:沿着视线方向,寻找物 体上的像素,只有离观察点最近的像素被显示。 若以像素为单位逐一判断,效率太低。常用的方 法是以面为单位,显示离观察点最近的面。 场景无限,显示窗口有限。只有能落入窗口范围 内的物体,才有显示的可能。为了减少计算量, 在三维空间中设置一个包围盒,包围盒内的物体 能够显示在窗口中,包围盒外的物体不用考虑。
2.曲面隐藏线消除
T1T2T3…………………Tk………………………..……………Tn Top数组
2.曲面隐藏线消除
5.
6.
考虑到前行(列)可以遮挡后列(行), 依据离视点的远近程度,按照从前到后 (行)、从左到右(列)的顺序,交替绘 制行、列曲线 其中超出高度记录器范围的曲线被绘制, 并且其高度记录进高度记录器,未超出的 部分不绘制
5.扫描线Z缓冲器算法
Z缓冲器算法的缺点是需要很大的Z缓冲 器;每一点处都需要计算它的纵坐标值, 计算量大。 为了克服第一个缺点,可以把整个显示 平面分成若干个区域,一区一区来显示, 这样Z缓冲器的单元数只要等于一个区域 的像素个数。 如果把区域变成显示屏幕的一行,就得 到扫描线Z缓冲器算法。
5.扫描线Z缓冲器算法
将这些数据结构组织起来,可以快速地确 定每个像素的深度值,从而确定像素的颜 色值。 思路与多边形的扫描转换类似,但因为有 多个多边形存在,复杂得多。
6.区域子分算法
1.
2.
3. 4.
显示窗口与投影多边形的四种关系: 多边形包围了窗口; 多边形与窗口相交; 2 窗口包围了多边形; 3 窗口与多边形分离。
6.区域子分算法
只有满足上述三种情况,我们才能够处理。 除此之外,我们无能为力。
6.区域子分算法
区域子分算法的处理方法是,将窗口一分 为四,再判断每个子窗口与多边形的关系。 这样,一些多边形与子窗口的关系成为上 述三种关系中的一种。
6.区域子分算法
如果子窗口与多边形的关系还不能满足三种情况 之一,再将该窗口一分为四。如此重复,直到所 有的子窗口与多边形的关系能满足三种情况之一 为止。
4.Z缓冲器算法
u
视线方向
v n
1.
2. 3. 4.
深度值的获取: 由多边形的任意三个顶点,可以确定平面方程; 将多边形投影到投影平面,并着色; 在着色的过程中可以确定多边形的每一个内点坐标; 由内点坐标和平面方程可以确定内点对应的纵坐标 (深度值)。
4.Z缓冲器算法
Z缓冲器算法的缺点是需要太多的缓冲存储 空间,要准备一个与屏幕像素对应的深度Z 值存储空间。 对于当前的计算机(或显卡),不成问题。 但在该算法提出的当年,是一个大问题。 当时为了克服这一问题,提出了扫描线Z缓 冲器算法。
平面多边形的外法矢量
设物体位于右手坐标系中,多边形顶点按逆时针排列。 设法矢量 ,则:
式中:n为顶点号,若i≠n,则j=i+1;否则i=n,j=1。 即i,j表示相邻的两个顶点
交点计算方法
投影线段参数方程表示
设两直线段分别为P1P2、P3P4,如图中所示。
两直线的交点
其参数方程:
交点计算方法
1.线框图消隐(隐藏线消隐)
物体用线框图形表示,才会出现隐藏线消隐 问题。
1.线框图消隐(隐藏线消隐)
物体是由多个面围成的,可以将一个物体分 解成多个面。 线框图形是用棱线来表示物体,棱线是两个 面的交线 每个面都用多边形来表示,多边形用顶点表 示,多边形的边就是棱线
1.线框图消隐
投影规范化
消隐与投影有密切的关系,同样的一组物 体,投影的方式不一样,投影与消隐的结 果不一样。 消隐是在投影完成后进行的,是在二维投 影平面进行 为了简化消隐处理,在消隐前将各种投影 转化为正射(平行)投影。
投影的规范化
斜平行投 影规范化
透视投影 规范化
将点p(x,y,z) 投影的结果 (xp,yp),看作是点 p’(xp,yp,z)。即将点p的z直接赋予点p’,就 完成了投影的规范化。
5.扫描线Z缓冲器算法
1. 2.
3.
4.
缓冲区由区域变成水平扫描线,问题发生质的 变化: 使用一个多边形表(PT)对所有的多边形排序、 分类; 使用一个活化多边形表(APT)列出与当前扫描 线相交的多边形; 为每个多边形建立一个边表(ET); 使用一个活化边表(AEPT)列出与当前扫描线相 交的边对。
可见部分确定
出点:线段出多边形处的点。 进点:线段进多边形处的点。
D1 Q J1
P
J2
D2 R D i D i 1 P Q
向量R在Z轴上的投影为负,进点
向量R在Z轴上的投影为正,出点
2.曲面隐藏线消除
这里的曲面特指由方程 z=f(x,y)表示的曲面,如 DEM表示的地形
6.区域子分算法
经过若干次划分,窗口的宽度与一个像素 的宽度一样了,可以按照第三种情况处理 了。 由于窗口宽度一次减少一半,很快就能达 到一个像素的宽度。
2.曲面隐藏线消除
7.
8.
高度记录器为一个一维数组,数组单元数量与显 示器视区宽度相同,即每个单元对应于一个像素 ,也就是每个单元对应于X轴整数部分 相邻两个空间点投影坐标(xpi,ypi)、(xpi+1,ypi+1)中 的yp值必须线性内插到x整数坐标上
2.曲面隐藏线消除
9.
为了不遮挡“漏斗”型曲面,设置两个高度记录 器,分别记录最大最小值
可见部分确定
3.
4. 5.
6.
7.
线段起点P处的不可见阶ivord的确定方法:分别 考虑线段PQ与所有多边形的第一个交点,如果 为“出点”, ivord 加1;如果为“进点”, ivord 不变。 如果P处ivord=0,则PJ1段可见,否则,不可见。 J1的不可见阶ivord,若J1为“出点”,ivord减 1;若J1为“进点”,ivord加1。 若ivord不为0,则J1J2段不可见,否则可见。 按照5、6依次处理余下的各个交点,直到每一 段可见性判断完毕。
隐藏线就是被一个或几个多边形遮挡住的棱线部 分 消除隐藏线就是找出被遮挡的棱线部分,只显示 未被遮挡的棱线部分
基本方法是依次将每根棱线与多边形相比较,确 定棱线被多边形遮挡的部分 只考虑与棱线可能存在遮挡关系的多边形,以减 少计算量
减少计算量的方法
位于一条棱线后面的物体不可能遮挡该棱线 用三维边界盒判断 Zmin线> Zmax体
2.曲面隐藏线消除
DEM与影像数据类似,有排列整齐的点阵数据阵 列组成 数据所在的行列表明位置信息,用(x,y)表示,数 据本身z表示高程值 这种曲面的绘制方法是将每个高程z=f(x,y)看成三 维空间中的一个空间点(x,y,z),将每一行、每一 列的空间点分别投影后连接起来,构成空间曲面 为了真实,必须消除被遮挡的曲线部分
两直线的交点应满足:
求得:
交点计算方法
若参数值同时满足0≤u≤1,0≤v≤1,则两线段有交 点,代入公式(8-1)或者(8-2)即可求得交点 坐标(x,y)。否则无交点。
可见部分确定
当一根线的所有交点都求处,就可以确定可见 部分了。
j1 P
j2
j3
j4
j5
j6 j7
j8
Q
1. 2.
将所有交点按照参数从小到大排列;对应参数 为:l1,l2,l3,…,lk。 设不可见阶参数ivord=0。