常用的消隐算法及总结

合集下载

第7章 三维几何02—消隐算法

第7章 三维几何02—消隐算法

2002年10月24日
上海交通大学计算机系 何援军
16
7.7.2 面对棱的遮挡(1)
r令 D1= Ax1+By1+Cz1+D D2= Ax2+By2+Cz2+D r 当 D1(D2)<0 D1(D2)=0 D1(D2)>0 r 且 N=N1+N2
2002年10月24日 上海交通大学计算机系 何援军 17
7.6 一般多面体的隐藏线消除
r 棱分类──一般多面体的自消隐 r 面对棱的遮挡 r 深度测试 r 重叠测试 r 隐藏线的表示和一维交集算法 r 消隐算法的数据结构 r 消隐算法的实施
2002年10月24日
上海交通大学计算机系 何援军
13
7.7.1 棱分类— — 一般多面体的自消隐(1)
r E1:由两个前向面相交而成( 3-4, 5-8) r E2:由两个后向面相交而成( 1-10, 10-7, 9-10, 6-2) r E3:由一个前向面和一个后向面相交而成,但前 向面更靠近视点( 1-2, 2-3, 4-1, 9-4 , 8-9 , 3-5, 7-8 , 6-7 )
令 N1(N2)=
-2 0 1
7.7.2 面对棱的遮挡(2)
r 则当 N≤-2,棱在面的后面( N=-2 ); qN=0,棱在面上; qN=-1,棱贯穿面; qN>0,棱在面之前。( N=1 和 N=2 )
2002年10月24日
上海交通大学计算机系 何援军
18
7.7.2 面对棱的遮挡(3)
r 一条棱被一平面遮挡的判别原则如下:
2002年10月24日
上海交通大学计算机系 何援军
20
7.7.2 面对棱的遮挡(5)

第九章消隐

第九章消隐

9.3:深度排序算法(画家算法)
深度排序算法原理 若场景中 任何多边形在 深度上均不贯 穿或循环遮挡, 则各多边形的 优先级顺序可 确定。 再依此优 先级顺序,由 远及近进行绘 制,就像画家 作画的过程。
9.3:深度排序算法(画家算法)
深度排序算法原理
算法的核心是多边形深度排序,但无法处理循环遮挡的情况
9.7:多边形区域排序算法
多边形区域排序算法原理 将多边形按深度值由小到大排序,用前面的可见多边形 去切割位于其后的多边形,使得最终每一个多边形要么是完 全可见的,要么是完全不可见的。
9.7:多边形区域排序算法
多边形区域排序算法特点 1、可用于任意多边形构成场景的消隐处理; 2、正确处理循环遮挡的情况;
深度缓存器算法特点 概念简单 便于硬件实现 存储空间大,每个像素的颜色和深度信息均需存储 两种改进的方法: 1、扫描线深度缓存器算法(扫描线Z-Buffer算法) 2、A缓存器算法
9.2:区间扫描线算法
区间扫描线算法原理
避免对被遮挡区域的采样是进一步提高扫描线算法计算效率的关键
9.2:区间扫描线算法
− A( x + 1) − By − D A z ( x + 1, y ) = = z ( x, y ) − C C
当处理下一条扫描线y=y-1时,该扫描线上与多边形相 交的最左边(x最小)交点的x值可以利用上一条扫描线上的 最左边的x值计算:
x
y −1, min
1 = x y ,min − k
9.1:深度缓存器算法(Z-Buffer算法)
深度缓存器算法的核心问题
z( x
y −1, min
, y − 1) =
− Ax
y −1, min

计算机图形学消隐算法

计算机图形学消隐算法

图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算法,以便于图形的快速生成和实时显示。

消隐算法

消隐算法

一般平面物体的消隐算法(凹多面体)
• 消隐算法可以按以下的步骤实现: • ①包含性检测(边界盒检测法)* • 边界盒:是指包含平面正投影的两对边分别 平行于坐标轴的最小外接矩形,也称为最小 投影矩形。 • 如果空间两平面图形的最小投影矩形没有重 叠部分,则这两个图形相互之间不存在消隐 问题。
一般平面物体的消隐体)
• 关于潜在可见面: • 对于单个凸多面体,它的表面不是全部 可见,就是全部不可见。其棱线的可见 性也只有这两种状况。 • 对于凹多面体则不同,它的棱线除了全 部可见、全部不可见外,还有部分可见、 部分不可见的情况 • 如根据外法线向量与视线向量夹角关系 判断得出的可见边9、10、11、12构成的 平面上,9—10全部可见;10—11全部不 可见,而11—12则部分可见 • 因此对凹多面体上经判断后得出的可见 面只能看作为潜在可见面,它上面的每 一条棱线最终的可见情况,还需作进一 步的判定。
消隐算法
• 利用立体表面外法线的方向可判断物体表 面的可见性,从而对物体作消隐处理,这 种方法对凸多面体的消隐处理特别简单有 效。 • 其它消隐算法 • 有些已被固化到硬件中,但消隐算法至今 还没有很完善地被解决,它仍在吸引人们 在不断地探索,作更深入的研究。 • 这方面的研究围绕着:正确的算法、节省 内存空间及加快运算速度(特别是实时 Real-time的速度)等目标而进行的。
• 由向量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的有向⾯积。

三维物体消隐算法

三维物体消隐算法

----本文将分析当前在CAD三维图形处理中最主要的12中消隐算法,其中8种属于物体空间法,4种属于图象空间法。在实际处理中,由于物体表面形态的复杂性和提高消隐处理的效率,通常都是结合使用多种消隐算法来完成物体的消隐处理的。
----一、物体空间法
----物体空间法是在三维坐标系中,通过分析物体模型间的几何关系,如物体的几何位置、与观察点的相对位置等,来进行隐藏面判断的消隐算法。世界坐标系是描述物体的原始坐标系,物体的世界坐标描述了物体的基本形状。为了更好地观察和描述物体,经常需要对其世界坐标进行平移和旋转,而得到物体的观察坐标。物体的观察坐标能得到描述物体的更好视角,所以物体空间法通常都是在观察坐标系中进行的。观察坐标系的原点一般即是观察点。
[x*y*z*1]=[xyz][cosβ0-sinβ0
0100
sinβ0cosβ0
0001]
物体绕X轴旋转的角度γ的三维旋转变换公式为
[x*y*z*1]=[xyz][1000
0corγsinγ0
0-sinγcosγ0
0001]
将上述表达式展开后可得如下公式
{x&#39;=cosα×x-sinα×z;
三维坐标变换
透视投影变换
基本图形元素间的求交计算
两个区域重叠判断
点与区域的包含测试
面的朝向测试
----S为消隐策略,即规定P中各基本操作过程被采用的先后次序。
----因此,设计消隐算法时应考虑上述五个要素及它们之间的相互关系。
----在计算机图形学中,为了简化算法,一般是利用多面体去逼近曲面体,因此多面体的消隐算法是曲面体的基础。本文的消隐算法讨论主要是基于多面体的消隐问题,对曲面体进行多次多面体近似,对每一多面体运用多面体消隐算法就能实现曲面体的消隐。

第6章消影及其算法

第6章消影及其算法

失去遮挡关系
6
10.1 基本概念

面消隐算法分类

投影窗口内的像素为处理单元。——确定最近点
for (窗口内的每一个像素) 图像空间-image-space { 确定距视点最近的物体,以该物体表面的颜色来显示像素)

场景中的物体为处理单元。——物体上的面是否最近 for (场景中的每一个物体) 场景空间-object-space
26
10.3 画家算法

问题*


不能处理多边形循环遮挡和多边形相互穿透 解决方法:分割
27
第10章

隐藏面的消除
基本概念 提高消隐算法效率的常用方法 画家算法 Z-Buffer(缓冲器)算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数


28
10.4 Z 缓冲器算法
12
10.2 提高消隐算法效率的常用方法
2. 透视投影转换为平行投影
消隐在投影前完成
物体间的遮挡关系与投影中心相关 物体间的遮挡关系与投影方式相关
13
10.2 提高消隐算法效率的常用方法
3. 包围盒技术
定义:一个形体的包围盒指的是包围它的简单形体 两个条件
包围盒充分紧密包围着形体 对其的测试比较简单
第六章
消隐及其算法
计算机图形学
后勤工程学院 油料储运教研室
1
第10章

隐藏面的消除
基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数


2
本章目标

几种面消隐算法的研究与比较

几种面消隐算法的研究与比较

引言消隐(Hidden Surface Removal)是在一定观察方向下消除不可见的线和面。

有时也称为可见性测试。

虽然各种消隐算法在可见性测试和不可见面消除方法上区别不大.但这些消隐方法有时还可以一起被统称为不可见面的消除.简称消隐。

在三维造型技术、真实感图形的显示、虑拟场景的显示、以及在地形.地图的绘制中.消隐都起到至关重要的作用。

所以研究和实现消隐算法,并根据场景的复杂度和各个不同应用领域的场景来提高消隐算法的速度是很有必要的,它对整个三维图形显示.真实感图形的显示以及各种地形地貌图形的显示是很有意义的。

1面消隐算法的分类就目前研究出的面消隐算法,按照它们对消隐算法加速的方法不同可分为两类:一类是致力于消隐方法的研究:(1)现有的消隐算法研究。

现有的常用的几种面消隐算法主要有:Z-buffer算法、扫描线算法、画家算法、BSP树算法等,其主要区别在于它们消隐空间不同、可见面测试方法和不可见消除方法不同,故它们所适用的范围也不同。

本文将在第三部分从每种算法本身的特点、消隐空间、排序效率和对场景的限制上对这几种消隐算法来分析和比较。

(2)由于消隐算法不同,它们适用的场景类型和复杂度也不同,所以有一些专门用于针对地形、地图的绘制、凸多边体消隐、复杂形体消隐、对某一种形体表示的场景的消隐、对曲面消隐等的算法研究。

(3)研究新的消隐方法或用不同方法对已有算法改进来提高消隐速度.如树结构的消隐算法、改进的扫描线算法、BSP树法在辐射度显示中的应用、BSP树法加入到层次遮挡图(HOM)算法、BSP树法结合Image cache(Sprite)算法等.可以在不同程度的提高图形绘制效率。

对于BSP树加入到其它算法中可提高其它算法效率,本文也将在第三部分进行比较。

另一类是致力于减少视域中的待处理的景物面片数,来达到加速消隐过程的目的。

硬件Z-buffer算法是目前最为常用的实时图形绘制算法,尽管其线性复杂度为O(N)(N为面片数),但该算法由于不考虑景物的空间连贯性,需逐一绘制景物面片而不管它是否隐藏。

消除影子算法

消除影子算法

消除影子是计算机视觉中的一个重要任务,它涉及到如何去除图像中的阴影,以便更好地理解和分析图像。

以下是一些消除影子的算法:
1. 基于光照模型的消除影子算法:这种算法假设物体表面受到均匀的光照,因此可以通过计算光照模型来消除阴影。

常用的光照模型包括Lambertian反射模型和Phong光照模型。

这种算法的优点是简单易用,但是它不适用于所有情况,因为实际场景中的光照条件往往不是均匀的。

2. 基于图像处理的消除影子算法:这种算法通常使用图像处理技术来消除阴影,例如使用中值滤波器、高斯滤波器或边缘检测算法等。

这种算法的优点是简单快速,但是它可能会导致图像失真或模糊。

3. 基于深度学习的消除影子算法:这种算法使用深度学习技术来学习阴影的特征,并自动识别和消除阴影。

常用的深度学习模型包括卷积神经网络(CNN)和生成对抗网络(GAN)等。

这种算法的优点是能够自动适应各种情况,但是它需要大量的训练数据和计算资源。

以上是三种常见的消除影子算法,每种算法都有其优缺点,需要根据具体的应用场景选择合适的算法。

常用的消隐算法及总结

常用的消隐算法及总结

常用的消隐算法及总结数学092邹继瑶 090064摘要:用计算机生成三维物体的真实图形是计算机图形学研究的重要内容。

真实图形在仿真模拟、几何造型、广告影视、指挥控制和科学计算的可视化等许多领域都有广泛应用。

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

较常用的消隐算法有画家算法、Z-Buffer算法及其它一些改进算法。

消隐算法从算法基本思想、算法描述和算法步骤等方面对画家算法、Z-Buffer算法和其它改进算法进行了分析,并得出了它们相关的特点。

关键词:计算机图形学消隐景物空间消隐图像空间消隐算法引言:近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。

在虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也非常重要。

计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等等,所有的这些,都要依赖于当今最前沿的计算机图形技术。

伴随着计算机硬件、软件的飞速发展,计算机图形学技术也得到了质的飞跃。

特别是面向对象技术和多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。

而程序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计算机图形学提供了更加宽阔的发展空间和强劲动力。

计算机图形学是研究通过计算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。

主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理,真实感图形的生成等内容。

面消隐作为图形学中一个分支是本文的一个重要的研究内容。

一.消隐的基本概念由于屏幕上的一些图元被另一些图元挡住所造成的。

例如,当需要描绘一个由多边形面组成的三维物体时,那么它的一部分必然要被挡住,要在屏幕上显示的必须是可见的东西。

打个比方,对于一个立方体,无论从哪个方向进行透视处理,最多只能看到其中的三个面。

这样,就要想出一种方法来决定哪些面是所能看到的。

消隐算法——精选推荐

消隐算法——精选推荐

消隐算法消隐算法⼀、消隐当我们观察空间任何⼀个不透明的物体时,只能看到该物体朝向我们的那些表⾯,其余的表⾯由于被物体所遮挡我们看不到。

若把可见的和不可见的线都画出来,对视觉会造成多义性。

会有后边两种情况要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯,简称为消隐。

消隐不仅与消隐对象有关,还与观察者的位置有关。

⼆、消隐的分类1>按消隐对象分类线消隐:消隐对象是物体的边⾯消隐:消隐对象是物体上的⾯2>按消隐空间分类物体空间的消隐算法:以场景中的物体为处理单位。

假设场景中有k个物体,将其中⼀个物体与其余k-1个物体逐⼀⽐较,仅显⽰它可见表⾯已达到消隐的⽬的。

(此类算法通常⽤于线框图的消隐!)图像空间的消隐算法:以屏幕窗⼝内的每个像素为处理单元。

对屏幕上每个像素进⾏判断,决定哪个多边形在该像素可见(这类算法是消隐算法的主流)三、图像空间的消隐算法:1>Z-buffer算法2>扫描线算法3>Warnock消隐算法画家算法:去除隐藏⾯最简单的算法原理:若场景中有许多物体,就是先画远的物体,再画近的物体。

这样⼀来,近的物体⾃然就会盖住远的物体。

但实际情况并不理想,在三维场景中,⼀个物体可能有些部分远,有些部分近,所以不管⽤什么顺序画,都⽆法得到正确的结果,所以画家算法只能解决简单场景的消隐问题。

Z-buffer算法1、也称Z缓冲区算法和深度缓冲器算法(能跟踪屏幕上每个像素深度的算法),让计算机⽣成复杂图形成为可能。

2、该算法有帧缓冲器和深度缓冲器,对应两个数组:Intensity(x,y)-属性数组(帧缓冲器),存储图像空间每个可见像素的光强或颜⾊Depth(x,y)-深度数组(Z-buffer),存放图像空间每个可见像素的Z坐标。

Z-buffer保存的是经过投影变换后的z坐标,距离眼睛近的地⽅z坐标的分辨率⽐较⼤,远处的分辨率⼩。

3、Z-buffer算法思想(开⼀个和帧缓存⼀样⼤⼩的存储空间,利⽤空间上的牺牲换区算法上的简洁)(1)先将z缓冲器中各单元的初始值置为最⼩值(2)当要改变某个像素的颜⾊值时,⾸先检查当前多边形的深度值是否⼤于该像素原来的深度值(3)如果⼤于原来的z值,说明当前多边形更靠近观察点,⽤它的颜⾊替换像素原来的颜⾊。

4.1mooc-消隐算法简介和分类

4.1mooc-消隐算法简介和分类

光线投射是求光线与场景的交点,该光线就是所谓的视线( 如视点与像素连成的线) 一条视线与场景中的物体可能有许多交点,求出这些交点后 需要排序,在前面的才能被看到。人的眼睛可以一目了然, 但计算机做需要大量的运算
(2)图像空间的消隐算法 以屏幕窗口内的每个像素为处理 单元。确定在每一个像素处,场 景中的k个物体哪一个距离观察点 最近,从而用它的颜色来显示该 像素
} for(场景中的每一个物体) { 将该物体与场景中的其 它物体进行比较,确定 其表面的可见部分; 显示该物体表面的可见 部分;
在物体空间里典型的消隐算法有两个: Roberts算法和光 线投射法 Roberts算法数学处理严谨,计算量甚大。算法要求所有被 显示的物体都是凸的,对于凹体要先分割成多个凸体的组 合
for(窗口中的每一个像素) {确定距视点最近的物体, 以该物体表面的颜色来显 示像素; }
这类算法是消隐算法的主流!
因为最后看到的图像是在屏幕上的,所以就拿屏幕作为处理 对象。针对屏幕上的像素来进行处理,算法的思想是围绕着 屏幕的。对屏幕上每个象素进行判断,决定哪个多边形在该 象素可见。
计算机图形学
第二章:光栅图形学算法
光栅图形学算法的研究内容

直线段的扫描转换算法 多边形的扫描转换与区域填充算法 直线裁剪算法 反走样算法 消隐算法
主要讲述的内容:
消隐的分类,如何消除隐藏线、隐藏面,主要介绍以下 几个算法:

Z缓冲区(Z-Buffer)算法 扫描线Z-buffer算法 区域子分割算法Βιβλιοθήκη 线框图消隐图真实感图形
消隐包括消除“隐藏线”和“隐藏面”两个问题
到目前为止,虽然已有数十种算法被提出来了,但是由于物 体的形状、大小、相对位置等因素千变万化,因此至今它仍 吸引人们作出不懈的努力去探索更好的算法 消隐不仅与消隐对象有 关,还与观察者的位置 有关

真实感显示的消隐方法

真实感显示的消隐方法

#
( 1)
也是一个字 节 的数 组 , 其每 个字 节对 应着 视口 上的 一 个像素。开 始时 , 帧 缓 存置 为背 景色 的 亮度 值。当 算 法写一个深度 值到 Z 缓 冲区 中的 一个 字节 时 , 它也 向 帧缓冲区中相应的字节写 入一颜 色值。当每 个表面 的
10




1999 年 第 5 期
1999 年 第 5 期
printf ( Please input the probability of A ( 0< = A< = 1) \ n ) ; scanf( % f , & pa) ; printf( Please input the probability o f B ( 0< = B< = 1) \ n) ; scanf( % f , & pb) ; printf( Please input Simulat io n t im es \ n ) ; scanf( % 1d , & loopnum) ; if( pa< 0 ! pa> 1 ! pb< 0 ! pb> 1) { printf( Input A or B or times value error! \ n ) ; g etch( ) ; return 1; } printf( T he Simulation Result \ n ) ; }
[摘 要] 在本系统中 , 我们 主要采用 了两种消 隐方法 , 它 们
穿透实心 物体。 近处 的物 体会 遮住 远处 的物 体 , 凹 多 面体物体会遮挡住自身的 某些部 分。这些看 起来似 乎 是很明了、 很自然的现象 , 但 要在计 算机上实 现却并 不 简单。一般 来说 , 三维线 框图不 是很逼 真 , 有 时还存 在 二义性。如图 1 中所示 , 其中 ( a) 是未经消隐的立方体 , 此时我们无 法确定 立方 体倒 底是 按 ( b) 的 方向 放置 的 还是按 ( c) 的方 向放置 的。所以在 计算机 图形生 成中 , 为了达到较 高 的逼 真性 , 必 须把 观察 者所 不能 看到 的 线和面从图形中消去 , 这一过程称为 隐藏线、 隐藏面的

计算机图形学消隐算法

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

2
<=

<=

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

13-消隐算法

13-消隐算法

Basic Concepts
投影变换失去了深度信息, 投影变换失去了深度信息,往往导致图 形的二义性
要消除二义性, 要消除二义性,就必须在绘制时消除被遮挡 的不可见的线或面, 的不可见的线或面,习惯上称作消除隐藏线 和隐藏面,简称为消隐。 和隐藏面,简称为消隐。
经过消隐得到的投影图称为物体的真实 图形。 图形。
Z缓冲器算法是所有图像空间算法中最简 单的一种隐藏面消除算法。它在象素级 上以近物取代远物,与形体在屏幕上的 出现顺序无关。 优点:1)简单稳定,利于硬件实现
2)不需要整个场景的几何数据
缺点: 1)需要一个额外的Z缓冲器
2)在每个多边形占据的每个像素处都 要计算深度值,计算量大
消除隐藏线
对造型的要求
将帧缓冲区置为背景值, (1)将帧缓冲区置为背景值,深度缓冲区置为最小的 深度值。即对所有的(x y), <=x<=M(x, <=y<=N深度值。即对所有的(x,y),0<=x<=M-1,0<=y<=Nframe(x,y)=背景值 zbuffer(x,y)=最小的 背景值. 最小的z l,令frame(x,y)=背景值.zbuffer(x,y)=最小的z 对要显示的物体、作预先指定的观察变换, (2)对要显示的物体、作预先指定的观察变换,使物 体表面上的任一点.总和某个像素位置(x y)相对 体表面上的任一点.总和某个像素位置(x v y)相对 而且总可以知道该点对应的深度z(x y)。 z(x, 应,而且总可以知道该点对应的深度z(x,y)。逐个 以任意次序、 对物体表面上的每一点, 以任意次序 、 对物体表面上的每一点 , 完成以下任 务 a.假定当前所讨论的点对应像素位置为(x.y), 假定当前所讨论的点对应像素位置为(x.y), (x 因此,可以确定该点的深度z(x y),该点的色彩或灰 z(x, 因此,可以确定该点的深度z(x,y),该点的色彩或灰 I(x. 度I(x.y) 如果z(x,y)>zbuffer(x,y) 那么将z(x y)置 z(x,y)>zbuffer(x,y), z(x, b.如果z(x,y)>zbuffer(x,y),那么将 z(x,y)置 zbuffer(x,y),同时I(x y)也置入frame(x,y)。 I(x, 也置入frame(x 入zbuffer(x,y),同时I(x,y)也置入frame(x,y)。 否则, 否则,不作任何操作

消隐

消隐

深度缓存算法 ( 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)。

2
2
区间扫描线算法原理
算法首先为各多边形建立一张边表和一张多边形表。边表需包含的内容有:进行消隐的 场景中所有线段的端点坐标、线段斜率的倒数、指向多边形表中对应多边形的指针。多边形 表需包含的内容有:各多边形的平面方程系数、各多边形的颜色值、指向边表的指针。在消 隐算法执行的过程中,从边表和多边形表中提取信息,构造一张有效边表。有效边表中包含 与当前扫描线相交的边,按 x 的升序进行排列。排列后这些边将扫描线分成一个个的子区间 [xi, xi+1],如图 9-2,可将扫描线上的子区间分为三种类型:
深度缓存器算法最大的优点是算法原理简单,不过算法的复杂度为 O(N),N 为物体表面 采样点的数目。另一优点是便于硬件实现。现在许多中高档的图形工作站上都配置有硬件实 现的 Z-buffer 算法,以便于图形的快速生成和实时显示。
深度缓存器算法的缺点是占用太多的存储单元,假定屏幕分辨率为 1024×768,则需要 2×1024×768 个存储单元,即使每一存储单元只占一个字节,也需要超过 100 万个字节。 不过,若采用扫描线 Z-buffer 算法时,可以每次只对一条扫描线进行处理,这样深度缓存 器所需的存储量仅为 1×屏幕水平显示分辨率×深度存储位数,当然需要增加边表和多边形 表的存储量。
(2)若 M 中的多边形个数为 1,则将 M 中的多边形直接加入到 N 中,算法结束;否 则按先进先出的原则从 M 中取出第一个多边形 A 进行处理(A 是 M 中 zmin 值最小的多边形), 同时将 A 从 M 中删除。
(3)从当前 M 中任意选择一多边形 B,对 A 与 B 进行判别。 ①若对 M 中任意的 B 均有 zmin(B)>zmax(A),则说明 A 是 M 中所有多边形中深度最 深的,它与其它多边形在深度方向上无任何重叠,不会遮挡别的多边形。将 A 按先进先出原 则加入 N 中,转(2);否则继续。 ②否则说明存在某一多边形 B,A 与 B 有深度重叠,则需要依次进行以下判别: a. 判别多边形 A 和 B 在 xoy 平面上投影的包围盒有无重叠,若无重叠,则 A、B 在 队列中的顺序无关紧要,将 A 按先进先出原则加入 N 中,转(2);否则继续。 b. 判别平面 A 是否完全位于 B 上 A 与 B 的重叠平面之后,若是,将 A 按先进先出原 则加入 N 中,转(2);否则继续。 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 中其它多边形的判别。
图 扫描线子区间
(1)子区间为空,如图中的子区间 1 和 5。 (2)子区间中只包含一个多边形,如图(a)中的 2 和 4,图(b) 中的 2 和 4,图(c) 中 的 4。
(3)子区间中包含多个多边形,如图(a)中的 3,图(b) 中的 3,图(c)中的 2 和 3。 若这些多边形在子区间内不相互贯穿,如图(a)中的 3,则仅需计算这些多边形在子 区间任一端点处的深度,深度(z 值)大的平面为可见面。若两多边形交于子区间一端点但 不贯穿,如图(b) 中的 3,则只要计算它们在区间另一端点处的深度,深度大者为可见面。 为了使算法能处理互相贯穿的多边形,如图(c),扫描线上的分割点不仅应包含各多边形的 边与扫描线的交点,而且应包含这些贯穿边界与扫描线的交点,如图(c)中增加了一个分割 点,从而形成了子区间 2 和 3,否则算法不能处理多边形相互贯穿的情形。当然还有另外一 种难以处理的情形就是循环遮挡(实际上贯穿也可看作循环遮挡的一种),若存在这种情况, 则需将多边形进行划分以消除循环遮挡。在形成了子区间后,只要取其投影覆盖该子区间的 各多边形,计算它们在区间端点处采样点的 z 值(深度),深度最大的平面为可见面。于是, 需要在有效边表的每个分割点对应的数据结点中增加一类信息:为每个多边形建立一个标志
深度缓存器算法的其它缺点还有它在实现反走样、透明和半透明等效果方面的困难。同 时,在处理透明或半透明效果时,深度缓存器算法在每个像素点处只能找到一个可见面,即 它无法处理多个多边形的累计颜色值。
(2)区间扫描线算法 每一条扫描线被物体中多边形的边界在屏幕的投影分割成若干相互邻接的子区间,每一 子区间上只有一个可见面,如图 9-3。因此,只要在每一个子区间内任一点处,在投影于该 处的各多边形中找出在该处深度(z 值)最大的多边形(最近的多边形),则这一多边形为 该扫描线子区间内的唯一可见面,可按这一多边形的光照属性和几何位置计算确定子区间内 各像素的显示颜色。这就是所谓的区间扫描线算法。区间扫描线算法也是一种图像空间消隐 算法。
深度缓存器算法最早由 Catmull 提出,是一种典型的,也是最简单的图像空间面消隐算 法,但其所需的存储容量较大,不仅要有帧缓存器来存放每个像素的颜色值,还需要有深度 缓存器来存放画面上每一像素对应的可见表面采样点的深度值。由于通常选择 z 轴的负向为 观察方向,因此算法沿着观察系统的 z 轴来计算各景物距离观察平面的深度,故该算法也称 为 Z-buffer 算法。
假定沿 z 轴的负向进行观察,因而 z 值大的距观察者近,多边形 A 上各点 z 坐标的最小 值和最大值分别记作 zmin(A)、zmax(A)。将多边形按深度进行排序的算法步骤为:
(1)对场景中的所有多边形按 zmin(多边形)由小到大的顺序存入一个先进先出队 列中,记为 M,同时初始化一空的先进先出队列 N(N 中存放已确定优先级的多边形,优先 级低的先进,扫描转换时也先处理)。
3
3
位,以表示扫描线上每一子区间所对应的覆盖多边形。
(3)深度排序算法
排序算法(Depth-Sorting Method)是介于图像空间消隐算法和景物空间消隐算法之间 的一种算法,它在景物空间中预先计算物体上各多边形可见性的优先级,然后再在图像空间 中产生消隐图。深度排序算法可分为两步进行:
(1)将多边形按深度进行排序:距视点近的优先级高,距视点远的优先级低。 (2)由优先级低的多边形开始,逐个对多边形进行扫描转换。其中步骤(1)是关 键。
消隐算法是把线框图变成实体图必要的算法。通过看相关的报道知道,地面勘测卫星, 气象卫星等要不断的向地面的工作站发送图片资料来帮助技术人员进行研究。而那个量是非 常庞大的,因而接收到图像时往往是已经过压缩和消隐后得到的图片。由于最普通的图元就 是多边形,所以讨论的许多技术都是只针对多边形模型的。由此将重点讨论用于多边形地形、 体素模型的一些技术,为了能够更深入的了解消隐有关的基本知识,做了如下的一些介绍和
关键词:计算机图形学 消隐 景物空间消隐 图像空间消隐 算法 引言: 近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。在 虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也 非常重要。计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等 等,所有的这些,都要依赖于当今最前沿的计算机图形技术。伴随着计算机硬件、 软件的飞速发展,计算机图形学技术也得到了质的飞跃。特别是面向对象技术和 多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。而程 序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计 算机图形学提供了更加宽阔的发展空间和强劲动力。计算机图形学是研究通过计 算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。 主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与 图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理, 真实感图形的生成等内容。面消隐作为图形学中一个分支是本文的一个重要的研 究内容。 一.消隐的基本概念
排序完成后得到队列 N,由于 N 是按优先级由低到高顺序排列的多边形先进先出队列,因 此只需从 N 中逐个取出多边形进行扫描转换即可。
(4)区域细分算法
区域细分算法的出发点是投影平面上一块足够小的区域可以被至多一个多边形所覆盖。 因此,可以这样来构造算法:考察投影平面上的一块区域,如果可以很“容易”地判断覆盖 该区域中的哪个或哪些多边形是可见的,则可按这些多边形的光照属性和几何位置计算确定 子区域内各像素的显示颜色;否则就将这块区域细分为若干较小的区域,并把上述推断原则
Z-buffer 算法的原理是:先将待处理的景物表面上的采样点变换到图像空间(屏幕坐 标系),计算其深度值,并根据采样点在屏幕上的投影位置,将其深度值与已存贮在 Z 缓存 器中相应像素处的原可见点的深度值进行比较。如果新的采样点的深度(z 值)大于原可见 点的深度,表明新的采样点遮住了原可见点,则用该采样点处的颜色值更新帧缓存器中相应 像素的颜色值,同时用其深度值更新 Z 缓存器中的深度值;否则,不做更改。
常用的消隐算法及总结
数学 092 邹继瑶 090064
摘要:用计算机生成三维物体的真实图形是计算机图形学研究的重要内容。 真实图形在仿真模拟、几何造型、广告影视、指挥控制和科学计算的可视化等许 多领域都有广泛应用。经过消隐得到的投影图称为物体的真实图形。较常用的消 隐算法有画家算法、Z-Buffer 算法及其它一些改进算法。消隐算法从算法基本 思想、算法描述和算法步骤等方面对画家算法、Z-Buffer 算法和其它改进算法 进行了分析,并究。
二. 常用的消隐算法
消隐算法按其实现方式可分为图像空间消隐算法和景物空间消隐算法两大类。图像空间 (屏幕坐标系)消隐算法以屏幕像素为采样单位,确定投影于每一像素的可见景物表面区域, 并将其颜色作为该像素的显示颜色。景物空间消隐算法直接在景物空间(观察坐标系)中确 定视点不可见的表面区域,并将它们表达成同原表面一致的数据结构。图像空间消隐算法有 深度缓存器算法、A 缓存器算法、区间扫描线算法等;景物空间消隐算法则包含 BSP 算法、 多边形区域排序算法等;介于二者之间的有深度排序算法、区域细分算法、光线投射算法等。 (1)深度缓存器算法
相关文档
最新文档