计算机图形学第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; } } } //处理下一条扫描线 //处理下一条扫描线 }
  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个面 基本运算
相关文档
最新文档