计算机图形学 机械工业出版社第七章 消隐

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章 消除隐藏线和隐藏面的算法
人不能一眼看到一个三维物体的全部表面。从 一个视点去观察一个三维物体,必然只能看到 该物体表面上的部分点、线、面,而其余部分 则被 这些可见部分遮挡住。如果观察的是若干 个三维物体,则物体之间还可能彼此遮挡而部 分不可见。因此,如果想有真实感地显示三维 物体,必须在视点确定之后,将对象表面上不 可见的点、线、面消去。执行这一功能的算法, 称为消隐算法 消隐算法。 消隐算法
y ji = f ( x j , zi ), i = n, n − 1, L ,1, j = 1,2, L y ji = yu ( j )或y ji < yl ( j ) 若
则(xi,yji,zi)为可见,并按如下原则修改yu(j)或yl(j) 的值: 若y > y ( j ),则y ( j ) = y
–1、线消隐 采用线框模型表示物体时,消隐对象是物体上的 边,消除的是物体上不可见的边。 –2、面消隐 采用表面模型表示物体时,消隐对象是物体上的 面,消除的是物体上不可见的面。
1、消除隐藏线
对造型的要求
– 在线框显示模型中,要求造型系统中有面的信息,
最好有体的信息,否则可能产生二义性。
最基本的运算
C k
1、凸多面体的面可见性
具体计算时,n和k记作n(nx,ny,nz),k(kx,ky,kz) 则有: n k +n k +n k nk
cos α = | n || k | =
x x y y z z 2 2 2 nx + n y + nz2 ⋅ k x2 + k y + k z2
分母为正,若分子为正,则 0 ≤ α < π / 2 ,面 可见;若为负,则 π / 2 < α ≤ π ,面不可见; 若为0,则 α = π / 2 ,此面退化为线。
X
Y
Z
设 zi = z0 + ih, i = 1,2,3, L , n, h > 0 平面z=zn是最靠近观察者的,从平面z=zn的曲 线y=f(x,zn)开始,对水平方向每个象素的对应x 坐标xj,计算yjn=f(xj,zn);
– 若yjn> yu(j),则点(xj,yjn,zn)是可见点,并把yu(j)内容
消隐算法的基本原则
把任意的三维形体看作是若干个多边形 表面形成的集合,研究多边形之间的遮 挡关系。 投影过程认为是沿z轴正向的正交投影。 也就是取视点在Z轴负无穷远点,视线方 向为(0,0,1) ,这时,物体将被正投 影到xy平面上 。
第一节 线面比较法消除隐藏线
1、首要问题 首要问题:凸多面体的面可见性 首要问题
考查多边形的深度次序在客体空间进行,图形 显示时的覆盖步骤在图像空间中实现,因此该 算法是客体空间和图像空间的混合算法。
深度排序算法
主要步骤如下:
– 1)、把所有多边形按顶点最大z坐标值进行
排序; – 2)、解决当多边形在z坐标范围内发生交叠 时出现的不明确问题; – 3)、按最大z坐标值逐渐减少的次序,对每 个多边形进行扫描转换。
多边形在z 多边形在z坐标范围内发生交叠的处理
所有多边形按顶点最大z坐标值排序后得到一 个排序表,设P是排在表中最后的那个多边形, Q是排在P前面且z坐标与其发生交叠的一个多 边形,需检查Q与P的次序关系,按如下五个步 骤:
– (1) 多边形的x坐标范围不相交叠,所以多边形不相
交叠; – (2)多边形的y坐标范围不相交叠,所以多边形不相 交叠; 范围检查方法进行,若这两 – 这两步用前一节类似的范围检查 范围检查 步检查有一个为真,则两个多边形互不遮挡,它们 排在表中的先后次序无关紧要。
C
nk=4>0,DAB为可见面; 同样可判断其他几个面: DAB可见,ADC不可见, ACB退化为线。
2、凸多面体线消隐和面消隐问题
判断出凸多面体上各表面的可见性,就可以很 容易的解决凸多面体的线消隐和面消隐问题。
– 若某个面可见,则该面上所有线都可见; – 若某个面不可见,则除了轮廓线外其他线都不可见;
(3)、精确深度检验 (3)、精确深度检验
过线段两个端点各作一条与 Zv轴平行的直线l1和l2,与 平面交于P1’和P2’,两组对 应点P1和P1’,P2 和P2’的Xv Yv 和Yv坐标相同。 若Z1<=Z1’且Z2<=Z2’,则线 段不会被遮挡; 若Z1>Z1’且Z2>Z2’,则线段 有可能被遮挡,需进一步检 查; 如果不是这两种情况,线段 必与表面相交,可用交点将 线段分为两条线段,分别属 于上述两种情况。
– 判断面对线的遮挡关系.反复地进行线线、线面之 反复地进行线线、 反复地进行线线
间的求交运算
面消隐算法的分类
第一类(图像空间的消隐算法) 第一类(图像空间的消隐算法):以窗口内的每个像 素为处理单元;如Z-缓冲、扫描线算法等; for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表面的颜色来显 示像素} 第二类(客体空间的消隐算法):以场景中的物体为 第二类(客体空间的消隐算法) 处理单元;如BSP算法、光线投射算法 for (场景中的每一个物体) { 将其与场景中的其它物体比较,确定其表面的可见 部分; 显示该物体表面的可见部分;}
Yv
Xv
O
Xmin1
Xmax1
Xmin2
Xmax2
(1)、Xv、Yv方向范围检查的实现 (1)、Xv、Yv方向范围检查 范围检查的实现
若Xmax1<=Xmin2或者 Xmax2 <=Xmin1,线段与多 边形表面必然没有遮挡 关系。 Yv方向的范围检查类似, 这样可避免很多不必要 的深度比较。
Yv
(1)、Xv方向和Yv方向的范围检查 (1)、Xv方向和Yv方向的范围检查
R S A’ B’ P A Yv D’ C’ Xv C D A B Zv
l1 l4 l2
Q
l3
范围检查可避免不必要的深度比较
(1)、Xv、Yv方向范围检查的实现 (1)、Xv、Yv方向范围检查 范围检查的实现
范围检查又 范围检查 称为最大最 最大最 小检验,因为很容易通 小检验 过比较相关的最大或最 小值实现; 以Xv方向为例,分别计 算投影线段和多边形表 面投影范围x坐标的最 大最小值, Xmax1,Xmin1,Xmax2,Xmin2
– 对于凸多面体,可见面就是朝向观察位置的
面。 – 面的外法向量n是面的正向,观察方向由指 向观察位置的方向向量k确定,若两向量的 夹角a满足0 ≤ α < π / 2,所考查面是可见的, 否则不可见。
α
k n
1、凸多面体的面可见性
图中的JEAF、 HCBG和DEABC所 在的面均为不 可见面。
F N J I A E D B G H
λ1
λ2 λ 3 λ4
λ5
λ6
进一步检查
设这些交点在线段投影上对 应的参数从小到大依次 是 λ1 , λ2 ,L ,则这些交点将 投影线段分成的各线段,一 般情况下可见性是交替出现 λ 可见性是交替出现 的,如图。 要检查某一段子线段是否可 见,可取子线段上任意一点, 若这点在多边形表面各边线 投影所成的封闭多边形内, 则子线段不可见,否则可见。
ji u u ji
若y ji < yu ( j ),则yl ( j ) = y ji
否则点不可见,不作修改。 这样就不会出现图7-8所示的错误了。
第三节 深度排序算法
也叫优先级算法,算法基本思想如下:
– 按多边形离开观察位置的距离进行排序,然后按照
距离减少的次序,把每个多边形内部点应有的象素 值送入帧缓冲存储器中,因为较近的多边形较后被 扫描,所以能覆盖或遮挡已经先送入缓冲存储器中 的多边形。
1、凸多面体的面可见性-例子
A(0,0,0),B(2,0,1),C(4,0,0),D(3, 2,1),观察方向向量k=(0,0,1), 三角面DAB的法向量是
n = DA × AB = (−3,−2,−1) × (2,0,1) i 2 j 0 k 1
zyLeabharlann D A Bx= − 3 − 2 − 1 = (−2,1,4)
Xv
O
Xmin1
Xmax1
Xmin2
Xmax2
(2)、Zv方向的范围检查 (2)、Zv方向的范围检查
Zv方向的范围检查就是沿Zv方向观察时 粗略的深度检验; 若线段投影的最大z坐标值Zmax1小于多边 z Z 形表面投影范围最小的z坐标值Zmin2,则 z 线段完全在表面前面,不发生遮挡现象。 具体检查时,可将线段和多边形投影到 Yv=0平面或Xv=0平面上,用类似于Xv、 Yv方向深度检查的方法进行判断。
若t>=0,则z1<=z1’; 若t<0,则z1>z1’。
进一步检查
若Z1>Z1’且Z2>Z2’,则线段有 可能被遮挡,需进一步检查; 要对平面遮挡了线段的哪些部 分作精确的计算,如右图,利 用第五章介绍的计算线段交点 的方法,依次计算线段的投影 与多边形表面边框的投影的交 点,这些交点把线段的可见部 分与不可见部分分开。
一条可能可见线与一个可能可见面比较
(1)、做Xv方向和Yv方向的范围检查; (2)、若不能判断,则做Zv方向的范围检 查,即粗略的深度比较; (3)、若还不能判断,则再进行精确的深 度比较。 下面分步做一下说明:
(1)、Xv方向和Yv方向的范围检查 (1)、Xv方向和Yv方向的范围检查
多边形表面ABCD在Zv=0平面上的正投影是 A’B’C’D’,包含A’B’C’D’且四边分别平行于Xv 和Yv轴的最小矩形PQRS就是A’B’C’D’的范围, 找PQRS的方法称为包围盒方法 包围盒方法。 包围盒方法 若空间任一线段的投影与多边形表面的投影范 围发生交叠,才可能与多边形表面有遮挡关系, 不发生交叠,肯定没有遮挡关系。
多边形在z 多边形在z坐标范围内发生交叠的处理
– (3) P完全在Q远离观察点的一侧; – (4) Q完全在P靠近观察点的一侧; – 这两步就是检查一个多边形是否在另一个多边形所
第七章 消除隐藏线和隐藏面的算法
要画出一个三维形体的确定的立体感很强的投 影视图,必须确定形体上哪些线或哪些面是不 可见的,就是消除隐藏线和隐藏面问题,经过 消隐得到的投影图称为物体的真实感图形 真实感图形; 真实感图形 消隐结果与观察物体有关,也与视点有关。
线框图
消隐图
真实感图形
消隐的分类
按消隐对象分类
换成yjn; – 若yjn<= yu(j),则点(xj,yjn,zn)是不可见点,不改变yu(j) 的值。
处理完z=zn后,再对平面z=zn-1上的曲线重复上 述工作,按z值递减方向一条一条曲线处理, 就得到消隐后的曲线族。
但上述算法只能处理局部上浮的曲面,对于局 部下沉的曲面,则会出现判断错误,如课本P152 图7-8所示。 为了解决这个问题,另建立M个单元yl(j),称为 下浮水平线数组,初值取大于或等于maxf(x,y), 每次求出
Xv
P ( x1, y1, z1 ) 1
′ ′ ′ P′( x1 , y1 , z1 ) 1
O
Zv
P2 ( x2 , y2 , z2 )
′ ′ 2 P2′( x2 , y2 , z′ )
Yv
(3)、精确深度检验 (3)、精确深度检验
具体实现:
– 设多边形表面所在平面方程为
Ax+By+Cz+D=0 Ax+By+Cz+D=0,直线l1的参数方程可写为 l x=x1,y=y1,z=z1+t,代入平面方程得: Ax1+By1+C(z1+t)+D=0 – 解出t就是P1’点对应的参数值:
λ2 λ 3 λ4
1
λ5
λ6
点与平面图形的 包含性检验问题
第二节 曲面隐藏线消除的浮动水平线算法
在表示方程y=f(x,z)的曲面线框式立体图时,也 存在隐藏线的消除问题。 此问题有一个简单的算法,称为浮动水平线算 浮动水平线算 法,就是按照离视点由近及远的原则,对组成 曲面的每条曲线上的每个象素依次处理,如果 比前一条曲线在视线该位置处函数值大,也就 是位置高,不会被遮挡,则可见,否则为不可 见。 基本步骤:建立M个象素(M个内存单元yu),称 为上浮水平线数组 上浮水平线数组,放上初值,初值应小于或 上浮水平线数组 等于minf(x,z)。
该方法只适用于单个凸多面体,若是非凸多面 体或多个形体,该方法可作为预处理步骤,即 先用这个方法排除不必考虑的不可见面,只考 虑可能可见面中哪些可见哪些不可见。
线面比较法消除隐藏线的一般步骤
1、利用外法线判断出所有可能的可见面, 可能可见面上的线段是可能可见线; 2、依次用每一条可能可见线,与每一个 可能可见面比较,确定出可见线、隐藏 线及可见线上的隐藏部分。
相关文档
最新文档