计算机图形学第5讲图形消隐

合集下载

计算机图形学消隐算法

计算机图形学消隐算法

图9-1 区间扫描线算法原理
算法首先为各多边形建立一张边表和一张多边形表。边表需包含的内容有:进行消隐的场景中所有线段的端点坐标、线段斜率的倒数、指向多边形表中对应多边形的指针。多边形表需包含的内容有:各多边形的平面方程系数、各多边形的颜色值、指向边表的指针。在消隐算法执行的过程中,从边表和多边形表中提取信息,构造一张有效边表。有效边表中包含与当前扫描线相交的边,按x的升序进行排列。排列后这些边将扫描线分成一个个的子区间[xi, xi+1],如图9-2,可将扫描线上的子区间分为三种类型:
递归进行上述空间剖分和景物分类过程,直至每一子空间中所含景物少于给定的阈值为止,可表示成一棵BSP树,图9-14(b)示出了图9-14(a)的分割过程和形成的分类景物。对于由多边形组成的场景,常选择与某一多边形重合的平面作为分割平面。一旦构造完BSP树,即可依据当前视点所在的位置,对场景中每一分割平面所生成的两个子空间进行分类,其中包含视点的子空间标记为“front”,位于分割平面另一侧的子空间标记为“back”。然后,递归搜索场景的BSP树,优先绘制标识为“back”的子空间中所含景物。
c. 判别B上平面A与B的重叠平面是否完全位于A之前,若是,将A按先进先出原则加入N中,转(2);否则继续。
d. 判别多边形A和B在xoy平面上的投影有无重叠,若无重叠,则A、B在队列中的顺序无关紧要,将A按先进先出原则加入N中,转(2);否则在A与B投影的重叠区域中任取一点,分别计算出A、B在该点处的z值,若A的z值小,说明A距视点远,优先级低,将A按先进先出原则加入N中,转(2);若A的z值大,则交换A和B的关系,即将B看作是当前处理对象,转(3)进行M中其它多边形的判别。
深度缓存器算法最大的优点是算法原理简单,不过算法的复杂度为O(N),N为物体表面采样点的数目。另一优点是便于硬件实现。现在许多中高档的图形工作站上都配置有硬件实现的Z-buffer算法,以便于图形的快速生成和实时显示。

消隐算法

消隐算法

3.消隐中主要考虑的基本问题
• (2)相关性correlativity(连贯性) • 所谓相关性问题是指形体之间或一个 形体的各部分之间引起隐藏现象改变 的相互关系。即场景的可见性在局部 区域内保持不变的倾向 • 通常利用连贯性,来提高排序过程的 效率。
连贯性问题:
• 扫描线的连贯性:
相邻两条扫描线上,可见面的分布情况相似。
一般平面物体的消隐算法 (凹多面体)
• 关于潜在可见面: • 对于单个凸多面体,它的表面不是全部 可见,就是全部不可见。其棱线的可见 性也只有这两种状况。 • 对于凹多面体则不同,它的棱线除了全 部可见、全部不可见外,还有部分可见、 部分不可见的情况 • 如根据外法线向量与视线向量夹角关系 判断得出的可见边9、10、11、12构成的 平面上,9—10全部可见;10—11全部不 可见,而11—12则部分可见 • 因此对凹多面体上经判断后得出的可见 面只能看作为潜在可见面,它上面的每 一条棱线最终的可见情况,还需作进一 步的判定。
• 深度连贯性:
同一表面上的相邻部分深度是相近的,而占据屏幕上同 一区域的不同表面的深度不同。这样在判断表面间的遮挡关系 时,只需取其上一点计算出深度值,比较该深度值即可得到结 果。
• 区域连贯性:区域指屏幕上一组相邻的像素,它们通常为同
一个可见面所占据,可见性相同。区域连贯性表现在一条扫描 线上即为扫描线上的每个区间内只有一个面可见。
• 由向量N和V的数量积得:
N V N V cosθ N V cosθ N V
, 其正、负号与N V一致
(5)表面可见性判断
• 显然表面可见性取决于表 面外法线向量N与视线向 量V之间的夹角θ • 若为0°≤θ≤90°,则该表面 可见 • 若为90°<θ≤180°,则该 表面不可见 • 可得表面可见性判断依据 为: N V N V cosθ • 若N·V≥0,则该表面可见 • 若N· V<0,则该表面不可见 N V cosθ N V

计算机图形学——隐藏线和隐藏面的消除(消隐算法)

计算机图形学——隐藏线和隐藏面的消除(消隐算法)

计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。

要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。

经过消隐得到的投影图称为物体的真实感图形。

下⾯这个图就很好体现了这种⼆义性。

消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。

算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。

算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。

2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。

如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。

例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。

⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。

边界盒技术⽤于判断两条直线是否相交。

进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。

注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。

如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。

消隐技术与真实感图形

消隐技术与真实感图形

7
第五章 消隐技术与真实感图形
5.1 消除隐藏线

凹多面体的隐藏线消除

平面多边形对直线段的遮挡判断算法
(1) 若线段的两端点与视点在给定平面的同一侧,则线段位于给定平面的前面, 是可见的,转(9)。 (2) 求线段与相应的无限平面的交。若无交点,转(4);否则,转(3)。 (3) 交点将该线段分成两段,与视点同侧的一段是可见的,它没有被遮挡;另一 段的可见性还不能确定,转(4),继续测试。 (4) 若线段的投影与给定平面的投影的包围盒不相交,则线段可见,它不被该平 面遮挡,转(9)。 (5)求所剩线段的投影与平面边界投影的所有交点。 (6)将线段的投影在交点处依次分成若干段,根据交点在原直线参数方程中的参 数值的大小对线段进行排序。 (7)求出第一投影线段的中点,若第一段的中点在多边形的投影内,则相应的线 段被遮挡,否则不被遮挡。 (8)其它各段的遮挡关系可依次按"遮挡/可见"交替地取值,如图4所示。例如: 如果第一段被遮挡,则后面线段的可见性依次为"可见,遮挡,可见,…";若 第一段可见,则后面的线段依次为"遮挡,可见,遮挡,…"。 (9)结束。
11
第五章 消隐技术与真实感图形
5.2 消除隐藏面

扫描线算法 在多边形填充算法中,活性边表的使用获得 了节省运行空间的效果。用这种思想改造 Zbuffer算法,就产生了扫描线算法。
12
第五章 消隐技术与真实感图形
5.3 光照模型

环境光 环境光是光线在物体和周围环境之间经过多 次反射后,最终达到平衡时形成的一种光, 又称为背景光。
I d I p Kd cos
其中, 是漫反射系数(0~1之间的常数),与 物体表面性质有关; 是入射光(光源)的光强; θ是入射光的入射角,即入射光与物体表面法向 量之

06-消隐

06-消隐

点与多边形的包含性检测: (1)射线法
P P1 P2 P3 P P1 P2
由被测点P处向 y = - 方向作射线 交点个数是奇数,则被测点在多边形内部。否则,偶数 表示在多边形外部。
若射线正好经过多边形的顶点 ,则采用“左开右闭”的原则来 实现。即:当射线与某条边的顶 点相交时,若边在射线的左侧, 交点有效,计数;若边在射线的 右侧,交点无效,不计数。 用射线法来判断一个点是否 在多边形内一是计算量大,二 是不稳定。原因是射线在经过 多边形顶点时,由于计算机本 身的误差(也许多了0.00001), 把本该无效的交点变成有效的 交点了。所以这种算法是不稳 定的。
上图所画的仅仅是一个简单的立方体,如果一个物体是由多 个形体所组成的,或者整个三维场景是由多个物体构成的,情 况就更为复杂了。 因此,要绘制出意义明确的、富有真实感的立体图形,首 先必须消去形体中的不可见部分,而只在图形中表现可见部 分。这就要去寻求解决显示三维物体的图形中消去不可见部 分的方法,也就是所谓的“消隐”问题。消隐包括消除“隐 藏线”和“隐藏面”两个问题。
消 隐
三维物体的显示和真实感图形是当今计算机图形学研究的 一个焦点。在二维显示设备上显示三维图像, 必须对三维图像 进行消隐处理, 通过消隐处理的物体才能很好的表现三维立体 效果, 但是这种物体明显缺乏真实感, 还需要对物体进行真实 感的处理, 这样才能逼真的显示物体。
主要讲述的内容:
消隐的分类,如何消除隐藏线、隐藏面,主要介绍以 下几个算法:
Z-Buffer算法() { 帧缓存全臵为背景色
深度缓存全臵为最小Z值(比如赋一个10-8次方)
for(每一个多边形)
{扫描转换该多边形
for(该多边形所覆盖的每个象素(x,y) )

计算机图形学-消隐

计算机图形学-消隐
跨入计算机殿堂的入门篇
计算机图形学 施智平
shizhiping@
第八章
图形的数据结构 消隐算法分类 隐线算法
隐面算法
图形的数据结构
W.K.Giloi在其著作 Interactive Computer Graphics中提出: Computer Graphics=Data Structure +Graphics Algorithms+Language
N z EFx EG y EFy EGx
外法矢量表示为: N N xiቤተ መጻሕፍቲ ባይዱ N y j N z k
给定视点位置球面坐标表示为:
( R sin cos , R sin sin , R cos ) 0 2 其中:R为视径, 0
隐线算法
线框模型消隐一般在物空间中进行 物空间消隐算法是根据边界线的可见性检测条 件,判断哪些边界线是可见的,哪些边界线是
不可见的,在屏幕上只绘制可见边界线。
凸多面体消隐算法
凸多面体消隐是最简单和最基本的情形 凸多面体的性质: 连接立体上不同表面的任意两点的直线完全 位于该凸多面体之内
由凸多边形构成,其表面要么完全可见,要 么完全不可见
凸多面体消隐算法的关键是给出测试其表面边 界线可见性的判别式
对于凸多面体的任一个面,其外法矢量和视矢 量的夹角θ可进行可见性检测 θ < 90°时,可见; θ > 90°时,不可见
D 法向向量N
<90°
F
E N
可见
>90°
视线向量V
E7 E8
E9 E10 E11 E12
P7 P8
P1 P2 P3 P4

图形消隐课程设计

图形消隐课程设计

图形消隐课程设计一、课程目标知识目标:1. 学生能够理解并掌握三维图形消隐的基本概念和原理;2. 学生能够识别并分类常见的三维图形消隐方法;3. 学生能够运用所学的消隐方法,分析和解决实际问题。

技能目标:1. 学生能够运用几何画板或其他绘图工具,绘制并展示三维图形消隐的过程;2. 学生能够运用计算工具,进行简单消隐算法的编程与实现;3. 学生能够通过小组合作,共同探讨并解决消隐问题,提高团队协作能力。

情感态度价值观目标:1. 学生能够认识到图形消隐在现实生活中的广泛应用,增强对数学学科的兴趣和认同;2. 学生在学习过程中,培养勇于尝试、克服困难的积极态度;3. 学生通过图形消隐的学习,体会数学美感,提高审美能力。

分析课程性质、学生特点和教学要求:本课程为初中数学课程,旨在让学生掌握图形消隐的基本知识和技能。

学生正处于好奇心强、求知欲旺盛的阶段,对新颖的图形消隐现象感兴趣。

因此,课程目标应具体、可衡量,注重实践操作和团队合作,以激发学生的学习兴趣和主动性。

课程目标分解为具体学习成果:1. 学生能够理解并解释图形消隐的基本概念;2. 学生能够独立绘制并展示三种常见的消隐方法;3. 学生能够编写简单的消隐算法,并运用计算工具实现;4. 学生能够通过小组合作,解决实际问题,提高团队协作能力;5. 学生能够体会到图形消隐的美感和数学价值,激发对数学学科的兴趣。

二、教学内容1. 引入图形消隐的概念,介绍其在现实生活中的应用,如建筑设计、游戏制作等;- 教材章节:第三章第四节“图形的消隐”2. 详细讲解三种常见图形消隐方法:隐藏面消除法、背面消隐法和深度缓冲消隐法;- 教材章节:第三章第五节“消隐方法”3. 通过几何画板演示图形消隐过程,让学生直观感受消隐效果;- 教材章节:第三章第六节“消隐效果的演示”4. 编写简单消隐算法,运用计算工具实现图形消隐;- 教材章节:第三章第七节“消隐算法及其实现”5. 小组合作,探讨并解决实际问题,如建筑物消隐、三维模型消隐等;- 教材章节:第三章实践活动“图形消隐的应用”6. 分析图形消隐在数学、艺术和科技领域的价值,提高学生的审美能力;- 教材章节:第三章总结“图形消隐的价值与意义”教学内容安排与进度:第一课时:引入图形消隐概念,介绍应用场景;第二课时:讲解三种消隐方法,演示消隐效果;第三课时:编写简单消隐算法,实现图形消隐;第四课时:小组合作,解决实际问题;第五课时:分析图形消隐的价值,进行课程总结。

消隐

消隐

提高消隐算法效率的常见方法4
F N J G H I A E B D
V
n
V
n
C V
前向面
后向面
多面体的隐藏线消除
图中的JEAF、HCBG和DEABC所在的面均为后向面。 其它为前向面。
提高消隐算法效率的常见方法5
• 物体分层表示 表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降 低算法复杂度。
Z-Buffer算法-算法描述
{ 帧缓存全置为背景色 深度缓存全置为最小Z值 for(每一个多边形) { for(该多边形所覆盖的每个象素(x,y) ) { 计算该多边形在该象素的深度值Z(x,y); if(Z(x,y)大于Z缓存在(x,y)的值) { 把Z(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓 存的(x,y)处 } 需要计算的像素深度值次数 } =多边形个数 多边形平均 多边形个数*多边形平均 多边形个数 } 占据的像素个数 }
扫描线Z-buffer算法
for ( v= 0;v<vmax;v++) { for (u= 0; u<umax; u++) 将帧缓冲器的第(u,v)单元置为背景色; (u,v)单元置为背景色 { 将帧缓冲器的第(u,v)单元置为背景色; 缓冲器的第u 将Z缓冲器的第u单元置为最小值 } (每个多边形 每个多边形) for (每个多边形) { 求出多边形在投影平面上的投影与当前扫描线的相交区间 该区间内的每个像素(u,v) for (该区间内的每个像素(u,v) ) 计算多边形在该像素处的深度值d { 计算多边形在该像素处的深度值d; Z缓冲器的第 单元的值) 缓冲器的第u if (d > Z缓冲器的第u单元的值) 置帧缓冲器的第(u,v)单元值为当前多边形颜色; (u,v)单元值为当前多边形颜色 { 置帧缓冲器的第(u,v)单元值为当前多边形颜色; 缓冲器的第u单元值为d; 置Z缓冲器的第u单元值为d; } } } //处理下一条扫描线 //处理下一条扫描线 }

计算机图形学-消隐

计算机图形学-消隐
16
共四十四页
1. 消除 自隐线、面 (xiāochú)
对于多面体的任一个面,可以根据其外法向
E
n和视矢量E的夹角θ来进行可见性检测。
法向n:规定每个多边形的法向都是指向物 体外部(wàibù)的。
前向面: θ∈(-90°,90°)时,表示该表 E 面可见,称为前向面。
后向面: θ∈[90°, -90°]时,表示该表 面不可见,称为后向面 。
θn
n 前向面 n
后向面
剔除依据:后向面总是被前向面所遮挡,从而不可见。不会 由于后向面的遮挡,而使别的棱成为不可见的。因此计算时, 可以把这些后向面全部去掉,这并不影响消隐结果。
17
共四十四页
1. 消除 自隐线、面 (xiāochú)
图中的JFAE、HCBG和 DEABC所在(suǒzài)的面均 为后向面。其它为前向 J
也称表优先级算法。
30
共四十四页
1. 画家 算法 (huàjiā)
关键:如何对场景中的物体表面按深度(远近(yuǎnjìn))排序,建立深 度优先级表?
先讨论在深度优先级排序中两个多边形P和Q之间的关系。多边形可以 按其最大或最小z值徘序,不妨假设按多边形的最大z值进行预排序,即
zmax(P)>zmax(Q)。
消隐(xiāo yǐn)
1
共四十四页
消隐(xiāo yǐn)
1 概述(ɡài shù) 2 线消隐 3 提高消隐算法的效率 4 面消隐
2
共四十四页
1 概述(ɡài shù)
什么叫做“消隐”?为什么要进行(jìnxíng)“消隐”?
将三维场景绘制在计算机二维显示屏上必须经过投影变换,投影 变换将三维信息变换到二维平面上,这个过程中深度信息被丢失, 生成的图形往往具有二义性。

第5讲 计算机图形学消隐算法

第5讲 计算机图形学消隐算法
消隐与透视关系较密切,体现在:
1)消隐必须在投影之前完成;因为消隐需要物 体三维信息,投影后只有二维信息; 2)物体之间的遮挡关系与投影中心(视点) 的选取有关; 3)物体之间的遮挡关系与投影方式有关,在 平行投影时,其遮挡关系可通过深度值来确定。
三、凸多面体隐藏线的消除
凸多面体的每个面要么可见,要么 不可见;不可能出现一个面部分可 见,部分不可见。
N V
=

2
面的法向量 面上一点指向观察点的向量 cos-1(
2
0<= <
|N||V| ) .
N.V
N N
V >0 时 可见 V <0 时 不可见
<= <=
.
、空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有相互遮挡的重叠部分? 对于根本不存在相互遮挡关系的物体,应 避免这种不必要的测试。
(z
i 1 m i 1
i
(x
i
式中:m为顶点号,若i≠n,则j=i+1;否则i=m,j=1。
• 为避免在程序中出现两种计算外法矢量的方 法,建议凸多边形也采用该算法进行计算。 多边形所在的平面方程可写成:
Ax By Cz D 0
D ( Ax0 By0 Cz 0 ) , • 其中:
要消除二义性,必须在绘制时消隐实际不可见得线和面, 即消隐。经过消隐的投影图称为物体的真实图形。
• 消隐不仅与消隐对象有关,还与观察者 的位置有关。如图所示,由于视点的位 置不同,物体的可见部分也不同:
C B
D
E2
A
E1
消隐与观察者的位置关系
• 按消隐的对象分类
线消隐(Hidden-line) 面消隐(Hidden-surface)

计算机图形学消隐

计算机图形学消隐
for(每个多边形) for (多边形在投影平面上的投影区域内的每个像素(u,v)) { 计算多边形在当前像素(u,v)处的深度值d; if (d>Z缓冲器的第(u,v)单元的值) { 置帧缓冲器的第(u,v)单元值为当前背景色; 置Z缓冲器的第(u,v)单元值为d; } }
for(v=0;v<vmax;v++) {
本算法中有两个缓存:
Z-Buffer算法的原理
Z-Buffer算法步骤:
1. 初始化:把Z-Buffer中各(x,y)单元置为z的 最小值,而帧缓存中各(x,y)单元置为背静色。
2. 在把物体表面相应的多边形扫描转换成帧缓 存中的信息时,对于多边形内的每一个采样 点(x,y)进行以下几步处理:
(a). 计算采样点(x,y)的深度z(x,y); (b). 如z(x,y)>zbuffer(x,y),则把z(x,y)存入z缓存,
再把多边形在z(x,y)处的颜色存入帧缓存的 (x,y)地址中。
算法描述
for(v=0;v<vmax;v++) for(u=0;u<umax;u++) { 将帧缓冲器的第(u,v)单元置为背景色; 将Z缓冲器的第(u,v)单元置为最小深度值; }
若对于窗口的每一个顶点,所得判别函 数值的符号相同,则所有顶点位于该直 线的同侧,窗口与此棱无交。若符号不 同,则多边形与窗口相交。
相交多边形判别示例
F y mx b y 5x 36 F (8,8) 8 5 *8 36 4 F (8,32) 32 5 *8 36 28 F (32,32) 32 5 * 32 36 92 F (32,8) 8 5 * 32 36 116
for(u=0;u<umax;u++) { 将帧缓冲器的第(u,v)单元置为背景色; 将Z缓冲器的第u单元置为最小深度值; } for(每个多边形) {

图形学第5章隐藏线

图形学第5章隐藏线

=zi平面上的曲线y=f(x,zi),在区间x∈[a,b]上只
有两种情况是可见的。
(1) f(x,zi)>max f(x,zj) x∈[a,b] (i<j) (2) f(x,zi)<min f(x,zj) x∈[a,b] (i<j) 其余线段上应当消隐,。
改进的曲面隐藏线消除
上述方法对下图的曲面是不适用的,图中的c点附近的虚线 部分应是可见的,但按上述算法却成了不可见了。
个面与其他每个面比较,求出所有点、边、面遮挡关系。
• 图像空间的消隐算法 (Z-buffer、扫描线、Warnock):
对屏幕上每个象素进行判断,决定哪个多边形在该象素 可见。 • 物体空间和图像空间的消隐算法 (画家算法):在物体空间 中预先计算面的可见性优先级,再在图像空间中生成消
隐图。
5.1
投影到屏幕上,近的后投的,覆盖了远的先投的,结果相当 于消除了隐藏面。 算法特点:画家算法的优点是简单,容易实现,可以作为
实现更复杂算法的基础。它的缺点是只能处理互不相交
的面,而且,深度优先级表中面的顺序可能出错。
画家算法的关键技术:对多边形进行深度排序
设每个多边形有一些顶点,这些顶点各有一个Z坐标,取
说明:
(1)上面五项中有一项成立,则P就不遮挡Q。
(2)如果上述五项都不成立,则说明Q有部分被P遮挡了。
于是要对P,Q两多边形在xoy平面的投影进行求交运算,在 交点处进行深度比较,判断出前后顺序便可。 (3)若遇到多边形相交或循环重叠(如图5-11(f))情况, 还需要在相交处分割多边形,再进行判断。
(d)包围
在窗口和每个多边形的关系确定以后,分下列三种情况。
⑴所有多边形都和窗口分离,这时只要把窗口内所有的象素

计算机图形学消隐算法

计算机图形学消隐算法
早期图形显示器是用线条表示图形,消隐主要是消隐线 问题。使用光栅显示器后,物体可用连续变化的色调来描 述,消隐算法的研究渐渐转向消隐面的问题。
隐藏线(面)的消除的两种基本算法
第一种是物空间算法。 • 它以三维场景中的物体对像作为处理单元的,在所
有的对像之间进行比较,除去完全不可见的的物体 和物体上不可见的部分。常用于线框表示立体的线 隐藏,也用于面隐藏。
• 特点是:算法精度低,只能达到屏幕精度为止,但速度往
往更高。 其算法是对每一个像素:
在和投影点到像素的连线相交的表面中找到离观察点最近 的表面
用该表面上交点处的颜色填充该像素。
for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表 面的颜色来显示像素}
算法复杂度
假设场景中有k个物体,平均每个物体表面 由h个多边形构成,显示区域中有m x n个像素, 则:

2
<=

<=

N . V时<0 不可见
、空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有相互遮挡的重叠部分? 对于根本不存在相互遮挡关系的物体,应 避免这种不必要的测试。
9
象空间消隐算法: 这类算法对屏幕上的每个象素进行判断,以决有 m×n个象素点,每个物体表面上有h个多边形,则该 类消隐算法计算量正比于mnh。
则: k个物体的算法复杂度为: O(mnkh) 。
10
算法排序
各种消隐算法均采用一定形式的几何排序。通过排序 ,可搜查出位置上靠近观察者的几何元素,确定几何元 素之间在位置上的遮挡关系,解决消隐计算的主要问题 。各种算法都有各自的排序方法和排序次序。排序次序 影响算法的效率。
二、 消隐基本技术

(计算机图形学)建模与消隐

(计算机图形学)建模与消隐
6
9.1.1 物体的几何信息和拓扑信息
几何信息:描述几何元素空间位置的信息。 拓扑信息:描述几何元素之间相互连接关系的信息。 描述一个物体不仅需要几何信息的描述而且需要拓扑信息的描述。 因为只有几何信息的描述,在表示上存在不惟一性。图9-1所示的5个 顶点,其几何信息已经确定,如果拓扑信息不同,则可产生图9-2和93所示的两种不同图形。
图9-5所示为立方体线框模型。
优点:可以产生任意方向视图,视图间保持正确的投影关系,常用 于绘制三视图或斜轴测图等。
缺点:所有棱边全部绘制出来,容易产生二义性,如图9-6所示
12
图9-5立方体线框模型
图9-6线框模型二义性
13
2.
表面模型(物体的皮肤)
表面模型(surface model)是利用物体的外表面来构造模 型,就如同在线框模型上蒙上了一层外皮,使物体具有了一层
图9-14 读入立方体的顶点表
22
4.读入立方体的面表 在程序中定义ReadFace()函数读入物体的面表,如图9-15
void CTestView::ReadFace() { //面的顶点数和面的顶点索引号 F[0].SetNum(4);F[0].vI[0]=4;F[0].vI[1]=5;F[0].vI[2]=6;F[0].vI[3]=7;//前面 F[1].SetNum(4);F[1].vI[0]=0;F[1].vI[1]=3;F[1].vI[2]=2;F[1].vI[3]=1;//后面 F[2].SetNum(4);F[2].vI[0]=0;F[2].vI[1]=4;F[2].vI[2]=7;F[2].vI[3]=3;//左面 F[3].SetNum(4);F[3].vI[0]=1;F[3].vI[1]=2;F[3].vI[2]=6;F[3].vI[3]=5;//右面 F[4].SetNum(4);F[4].vI[0]=2;F[4].vI[1]=3;F[4].vI[2]=7;F[4].vI[3]=6;//顶面 F[5].SetNum(4);F[5].vI[0]=0;F[5].vI[1]=1;F[5].vI[2]=5;F[5].vI[3]=4;//底面 }

消隐

消隐

深度缓存算法 ( Z—Buffer算法)
Z—Buffer ---- 用于存放与屏幕上像素点对应的物体上点的深度值。
y
投影面
z
视线方向
视点位置
x
屏幕像素
F — Buffer
Z—Buffer
Z-buffer算法的步骤如下:
⑴ 初始化ZB和CB,使得ZB(i, j)=Zmax,CB(i, j)=背景色。其中, i=1, 2, …, m,j=1, 2, …, n。 ⑵ 对多边形,计算它在点(i, j)处的深度值zi, j。 ⑶ 若zijZB(i, j),则ZB(i, j)=zij,CB(i, j)=多边形的颜色。 ⑷ 对每个多边形重复⑵、⑶两步。最后,在CB中存放的就是 消隐后的图形。
背面剔除算法
• 背面剔除算法
法向向量N
<90°
cos N V
视线向量V
可见
>90°
法向向量N
<90°
可见
不可见
法向向量N
8.1 消隐基础
8.1.1 消隐的分类
• 线消隐 (Hidden-line)-景物空间消隐 对象:线框模型
•面消隐 (Hidden-surface)-图像空间消隐
对象:填色图
问题: ① 对于线画图形会出现多义性,要增强图形的真实感必须进 行消隐处理。 ②对于光栅扫描着色的面图形则会导致图形错误。
基本概念
二.消隐涉及的算法:
• 排序 • 连贯性
是指所考察的物体或画面的性质在局部区域内保持不变的一种 倾向。
例如:
棱边的连贯性是指:棱边的可见性在它与其他棱边相交时才发生
变换;
for (场景中的每一个物体)
{ 将该物体与场景中的其它物体进行比较,确定其表面的 可见部分;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
主要包围盒
长方体 正方体 球
19
提高消隐算法效率的常用方法
作用—避免盲目求交
两个空间多边形A、B在投影平面上的投影分别为A’,B’ , 因为A’ 、B’ 的矩形包围盒不相交,则A’、B’ 不相交,无 须进行遮挡测试
一般情况下,判断两物体是否遮挡时,前一种情况大量存 在,避免了物体间的复杂相交测试
消除隐藏线
(3)求直线与相应无穷平面的交。若无交点,转4。否则, 交点在线段内部或外部。若交点在线段内部,交点将 线段分成两段,与视点同侧的一段不被遮挡,另一段 在视点异侧,转4再判;若交点在线段外部,转4。
P0
12
(4)求所剩线段的投影与平面边界投影的所有交点。 若无交点,转5
P0 P1 P2 P3 P4 P5
世界坐标系
用户用来定义图形的坐标系,主要用于计算机图形场 景中所有图形对象的空间定位和定义。
观察坐标系
可以在世界坐标系的任何位置、任何方向定义,通常以
视点的位置为原点,通过用户指定的一个向上的观察向量
来定义整个坐标系统。
vn
y
u
P0(x0,y0,z0)
x
z
7
基本概念
将世界坐标系中的三个坐标轴转换为与观察坐标系的三个 坐标轴对应重合的逆变换
if ( Ei 被Fj 全部遮挡) {将Ei清空; break; }
简单的剔除
if ( Ei 被Fj 部分遮挡) {
从Ei中将被遮挡的部分裁掉;
if ( Ei 被Fj 部分遮挡) { 从Ei中将被遮挡的部分裁掉; if(Ei被分成若干段) { 取其中的一段作为当前Ei 段;
if(Ei被分成若干段) { 取其中的一段作为当前Ei 段; 将其它段及相应的j压栈;
平移变换,将观察参考点移到世界坐标系的原点处
1 0 0 0

T1


0 0
1 0
0 0 1 0
x0 y0 z0 1
旋转变换,将u,v,n分别对应到x,y,z
即绕x轴旋转 角,绕y轴旋转 角,绕z轴旋转 角
1
Hale Waihona Puke T20 0
0
0
cos sin
4
基本概念
消隐的对象
三维物体 三维体的表示主要采用边界(多边形)表示
消隐结果
与观察物体有关,也与视点位置和方向有关
线框图
消隐图
真实感图形
5
基本概念
消隐分类 消除隐藏线:消除不可见线——线框表示物体 消除隐藏面:确定可见面(消除不可见面)—— 表面表示物体
6
基本概念
线线间求交运算 线面间求交运算
9
消除隐藏线
平面对直线段的遮挡判断算法
思路:先做简单判断,将计算量较大的判断留到后面做
10
消除隐藏线
(1)若线段的两端点及视点在给定平面的同侧,线段 不被给定平面遮挡
(2)若线段的投影与平面投影的包围盒无交,线段不 被给定平面遮挡,转7

11
20
提高消隐算法效率的常用方法
背面剔除
外法向:规定每个多边形的外法向都是指向物体外部的
前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝 角,称为前向面
后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐 角,称为后向面(背面)
投影方向
夹角为180-u
图形消隐
地球科学与信息物理学院GIS中心
1
图形消隐
基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 OpenGL相关函数
2
基本概念
问题
投影变换失去了深度信息,往往导致图形的二义性及失去 遮挡关系
失去遮挡关系
3
基本概念
要消除二义性和保持遮挡关系,就必须在绘 制(投影)时消除被遮挡的不可见的线或面, 习惯上称作 消除隐藏线(Hidden Line Removal) 消除隐藏面(Hidden Surface Removal) 简称为消隐
相邻物体的属性之间有一定的连贯性,其属性值通常是平 缓过渡的,如颜色值、空间位置关系等
包括:
物体连贯性 面的连贯性 区域连贯性 扫描线连贯性 深度连贯性
18
提高消隐算法效率的常用方法
包围盒技术
定义:一个形体的包围盒指的是包围它的简单形体 两个条件
包围盒充分紧密包围着形体 对其的测试比较简单
13
(5)以上所求得的各交点将线段的投影分成若干段, 求出第一段中点。
(6)若第一段中点在平面的投影内,则相应的段被遮 挡,否则不被遮挡;其他段的遮挡关系可依次交替 取值进行判断。
P0 P1 P2 P3 P4 P5
14
消除隐藏线
HiddenLineRemove() { 坐标变换; for(对每个面Fj)
求每条边上的遮挡 While(栈不空){
<Ei ,j0> = 栈顶;
for(Fj的每一条边Ei) 将二元组< Ei ,j>压入堆栈
for(j!= j0的每一个面Fj) {
While(栈不空){ <Ei ,j0> = 栈顶; for(j!= j0的每一个面Fj) { if ( Ei 被Fj 全部遮挡) {将Ei清空; break; }
}
16
基本概念
面消隐算法分类(续)
场景中的物体为处理单元——物体上的面是否最近 for (场景中的每一个物体) 物体空间-object-space
{ 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分;
}
17
提高消隐算法效率的常用方法
主要技术
1. 利用连贯性(Spatial Coherence)
将其它段及相应的j压栈; } } } if(Ei段不为空)
} } } if(Ei段不为空)
分治策略
显示Ei ;
显示Ei ;
} }
}
15
基本概念
面消隐算法分类
投影窗口内的像素为处理单元——确定最近点
for (窗口内的每一个像素) {
图像空间-image-space
确定距视点最近的物体,以该物体表面的颜色来显示像素
0
0
sin cos
0
0 cos
0


0
0 sin
1

0
0 sin
10
0 cos
00
0 cos
0 sin
0 0
1

0
sin cos
0 0
0 0 0 0 1 0 0 1
8
消除隐藏线
体=n个面 基本运算
相关文档
最新文档