第6章消影及其算法
第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-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
计算机图形学消隐算法ppt课件
往更高。 其算法是对每一个像素:
在和投影点到像素的连线相交的表面中找到离观察点最近 的表面
用该表面上交点处的颜色填充该像素。
for (窗口内的每一个像素)
{ 确定距视点最近的物体,以该物体表
面的颜色来显示像素}
7
算法复杂度
假设场景中有k个物体,平均每个物体表面 由h个多边形构成,显示区域中有m x n个像素, 则:
• 按消隐空间分类
物体空间消隐算法 图像空间消隐算法
4
线消隐(Hidden-line) 消隐对象是物体上不可见的线,一般用于
线框图。当用笔式绘图仪或其它画线设备绘制 图形时,主要使用这种算法。 面消隐(Hidden-surface)
消隐对象是物体上不可见的面,一般用于 填色图。当用光栅扫描显示器绘制图形时,主 要使用这种算法。
11
二、 消隐基本技术
为了提高消隐算法的效率,各种消隐算法常 采用一些有效的消隐基本算法。
利用连贯性 将透视投影转换成平行投影 包围盒技术 背面剔除 空间分割技术 物体分层表示
12
利用连贯性
连贯性是指从一个事物到另一个事物,其
属性值(如颜色值、空间位置)通常是平缓过渡
的性质。
物体连贯性
面的连贯性
9
象空间消隐算法: 这类算法对屏幕上的每个象素进行判断,以决
定物体上哪个多边形在该象素 点上是可见的。若屏 幕上有m×n个象素点,每个物体表面上有h个多边形 ,则该类消隐算法计算量正比于mnh。
则: k个物体的算法复杂度为: O(mnkh) 。
10
算法排序
各种消隐算法均采用一定形式的几何排序。通过排 序,可搜查出位置上靠近观察者的几何元素,确定几何 元素之间在位置上的遮挡关系,解决消隐计算的主要问 题。各种算法都有各自的排序方法和排序次序。排序次 序影响算法的效率。
计算机图形学——隐藏线和隐藏面的消除(消隐算法)
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法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'=cosα×x-sinα×z;
三维坐标变换
透视投影变换
基本图形元素间的求交计算
两个区域重叠判断
点与区域的包含测试
面的朝向测试
----S为消隐策略,即规定P中各基本操作过程被采用的先后次序。
----因此,设计消隐算法时应考虑上述五个要素及它们之间的相互关系。
----在计算机图形学中,为了简化算法,一般是利用多面体去逼近曲面体,因此多面体的消隐算法是曲面体的基础。本文的消隐算法讨论主要是基于多面体的消隐问题,对曲面体进行多次多面体近似,对每一多面体运用多面体消隐算法就能实现曲面体的消隐。
计算机图形学-消隐
计算机图形学 施智平
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、理解真实感图形的基本原理,掌握真实感图形绘制的基本方法,为进一步掌握计算机图形学中图形处理技术奠定基础。
二、实验内容1、编写程序实现深度缓存器的消隐算法有三个多边形,他们的顶点坐标值分别是:(1)(10,3,20),(20,28,20),(22,28,20),(22,3,20)(2)(5,12,10),(5,20,10),(27,20,10),(27,12,20)(3)(15,15,25),(25,25,5),(30,10,5)。
2、将上题所给的多边形,利用OpenGL函数,绘制其平面,并试添加灯光与纹理效果。
3、*综合运用图形学知识,自行设计一个三维图形,实现消隐以及灯光、纹理等。
三、实验过程深度缓存(Z-buffer)算法帧缓冲器–保存各像素颜色值(CB)z缓冲器 --保存各像素处物体深度值(ZB)z缓冲器中的单元与帧缓冲器中的单元一一对应将z缓冲器中各单元的初始值置为-1(规范视见体的最小n 值)。
当要改变某个像素的颜色值时,首先检查当前多边形的深度值是否大于该像素原来的深度值(保存在该像素所对应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色;否则说明在当前像素处,当前多边形被前面所绘制的多边形遮挡了,是不可见的,像素的颜色值不改变。
Z-buffer算法的流程:帧缓冲区初置背景色;z缓冲区个元素初始值置为最小z值(离观察点最远);For(场景中的每个多边形){扫描转换该多边形;For(多边形所覆盖的每一像素点(x,y)){计算多边形在该像素的深度值z(x,y);If(z(x,y)>Zbuffer中对应此像素点(x,y)的z值){把多边形在(x,y)处的深度值z(x,y)存入Z_buffer中的(x,y)处;把多边形在(x,y)处的亮度值存入F_buffer中的(x,y)处;}}}当所有的多边形都处理完之后,帧缓冲器中的内容即为消除隐藏面后的图像。
计算机图形学消隐算法的分析与实现
本科毕业设计题目:计算机图形学消隐算法的分析与实现姓名院系信息科学与工程学院专业计算机科学与技术年级学号指导教师2011 年5月10 日毕业设计选题报告毕业设计任务下达书学院信息科学与工程学院专业计算机科学与技术学号****** 姓名*****一、毕业设计题目计算机图形学消隐算法的分析与实现二、主要内容本设计是在对凸多面体的消隐算法、以及Z—Buffer算法进行系统分析以后,应用Visual C++设计程序语言,从而实现对三维立体图形的消隐处理,以得到物体的只是图形。
三、具体要求(1)查找相关资料,理解Visual C++及其图形函数的理论知识;(2)根据设计内容主动分析整体并划分设计模块;(3)根据划分的设计模块独立完成实现各个功能的具体代码;(4)高度重视论文的撰写并调试实现整体功能,主动和指导老师沟通;(5)认真听取指导老师的意见,遵循相关的规定,以达到设计最终效果。
四、主要参考文献[1]陈元琰.张晓竞计算机图形学实用技术[M]. 北京:科学出版社,2000[2]范幸义. 计算机图形学(第三版)[M]. 重庆:重庆大学出版社,2008.2.[3]张全伙,张剑达.计算机图形学[M].北京:机械工业出版社,2003.8.[4](美)Peter Shirley计算机图形学(第二版)[M].北京:人民邮电出版社,2007.6.五、进程安排六、毕业设计任务下达书于年月日发出。
毕业设计应于年月日前完成后交指导教师,由指导教师评阅后提交毕业设计答辩委员会。
七、毕业设计任务下达书一式两份,一份给学生,一份留学院(系)存档。
指导教师:签发于20 年月日分管院长:签发于20 年月日毕业设计开题报告院(系):信息科学与工程学院学号:***注:1、论文(设计)总成绩=指导教师评定成绩(50%)+评阅人评定成绩(20%)+答辩成绩(30%)2、将总成绩由百分制转换为五级制,填入本表相应位置。
目录1. 前言 (3)2. 开发环境和工具 (4)3. 消隐算法的描述 (5)3.1消隐算法的提出 (5)3.2消隐算法的分类 (7)4. 消隐算法的数学知识 (8)4.1向量的叉积 (8)4.2线性代数 (8)4.2.1行列式 (8)4.2.2矩阵 (9)4.3三维坐标与二维坐标的转换 (10)5.几种常见的消隐算法分析与比较 (11)5.1凸多面体消隐处理 (11)5.2隐藏面的消除 (13)5.2.2 画家算法 (16)5.2.3 Z-buffer消隐算法 (19)5.3几种消隐算法的比较 (20)6. 结束语 (21)参考文献 (21)致谢 (22)附录:部分模块代码 (22)计算机图形学消隐算法的分析与实现摘要:用计算机生成具有真实感的三维物体图形,是计算机图形学的一个重要研究内容,而要实现这一过程就不得不提到消隐算法。
消隐及真实感处理技术课件
深度缓存算法
是一种典型的、也是最简单的图象空间消隐算法。
Y
X
O
Z
j
i
p1
p2
屏幕
物体
R
1、ZB为深度缓存,FB为帧缓存,初始化ZB和FB,使得ZB(i,j)=机器最大值,FB(i,j)=背景颜色。 其中,i=1,2,…,m. j=1,2,…n. 2、FOR j=1,n //第j根扫描线。 FOR i=1,m //第j根扫描线上第i个像素。 FOR k=1,N //第k个多边形Pk 2.1 令Zij=机器最大值 2.2 判断点(i,j)是否在多边形Pk在XOY面上的投影多 边形内; 2.2 若点(i,j)在Pk的投影多边形内,则计算多边形Pk 在点(i,j)处的深度值Zij ; 2.3比较Zij与ZB(i,j)的大小,若Zij <ZB(i,j),则令 ZB(i,j)=Zij; FB(i,j)=多边形Pk的颜色。
环境光是光在物体和周围环境之间多次反射的结果,它不是直接来自光源,而是来自周围的环境对光的反射。环境光的特点是:照射在物体上的光来自周围各个方向,又均匀地向各个方向反射。设Ia为环境光的强度,于是,P点对环境光的反射强度为 Ie=Ia·Ka
P
镜面反射光 镜面反射的特点:光源来自一个方向,反射光集中在反射方向。如图 镜面反射模型又称Phong模型,可以表示为: Is=Ip·Ks·cosn 其中,Is为镜面反射光在观察方向上的光强,Ip为点光源的强度,Ks为镜面反射系数,为视点方向V与镜面反射方向R之间的夹角,n是与物体表面光滑有关的一个常数,一般取为1~2000,表面越光滑,n越大。
对多边形顶点的光亮度作双线性插值
其中:
xs由i增加为i+1时
I1(x1,y1)
消隐算法——精选推荐
消隐算法消隐算法⼀、消隐当我们观察空间任何⼀个不透明的物体时,只能看到该物体朝向我们的那些表⾯,其余的表⾯由于被物体所遮挡我们看不到。
若把可见的和不可见的线都画出来,对视觉会造成多义性。
会有后边两种情况要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯,简称为消隐。
消隐不仅与消隐对象有关,还与观察者的位置有关。
⼆、消隐的分类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值,说明当前多边形更靠近观察点,⽤它的颜⾊替换像素原来的颜⾊。
计算机图形学 消隐PPT课件
可编辑课件PPT
11
提高消隐算法效率的常见方法 6
复杂度比较:
不妨假定每个小区域的相关物体表中平均有h个物 体,场景中有k个物体,由于物体在场景中的分布是分 散的,显然h远小于k。根据第二种消隐方法所述,其 算法复杂度为O(h*h),远小于O(k*k)。
可编辑课件PPT
14
画家算法
关键:如何对场景中的物体按深度(远 近)排序,建立深度优先级表? 一种针对多边形的排序算法如下:
假定在规范化投影坐标系uvn中,投影方向是n 轴的负向,因而n坐标大距观察者近。记nmin(P) nmax(P)分别为多边形P的各个顶点n坐标的最小 值和最大值,算法步骤如下:
可编辑课件PPT
25
区域子分算法
如何判别多边形与窗口的分离与包围关系?
编码方法:1)区域编码
2)多边形顶点编码 3)多边形边的编码 4)多边形的编码
可编辑课件PPT
26
光线投射算法
算法思路:将通过绘图窗口内每一个像 素的投影线与场景中的所有多边形求交。 如果有交点,用深度值最大的交点(最 近的)所属的多边形的颜色显示相应的 像素;如果没有交点,说明没有多边形 的投影覆盖此像素,用背景色显示即可。
step 3.2.2 若P的所有顶点位于Q所在平面的不可见的一侧,则P,Q关系 正确,令L = L – {P}, 返回step 2;否则进行下一步。
step 3.2.3 若Q 的所有顶点位于P所在平面的可见的一侧,则P,Q关系正 确,令L = L – {P}, 返回step 2;否则进行下一步。
计算机图形学消隐
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(每个多边形) {
消隐
深度缓存算法 ( 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 (场景中的每一个物体)
{ 将该物体与场景中的其它物体进行比较,确定其表面的 可见部分;
第六章_消隐处理
深度缓冲器算法
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)处 } } } }
视点与线段同侧视点与线段同侧包围盒不交包围盒不交分段交替取值分段交替取值线面相交线面相交线面平行线在面后线面平行线在面后线面交与线段外线面交与线段外多面体的消隐算法任意多面体的消隐算法多面体的消隐算法在投影关系上体的表面要么完全可见要么完全不可见背面剔除算法法向向量n视线向量v法向向量n法向向量n9090可见可见不可见90cos多面体的消隐算法表面外法线与其可见性的关系设平面p数量积
第6章 消 隐
消隐的概述
多面体的消隐算法
深度缓冲器算法
扫描线算法
画家算法
光线追踪算法(Ray Casting)
(a)图所示的图形是具有什么样含义的的图 形呢?
如果按两种情况分别消去其中的三条线 段,那么它可以被看成是表示空间的一个 正方体在两个不同的观察位置上所看到的 轴测图。如(b)、(c)所示。
按消隐空间分类
― ―
消隐的概述
线消隐(Hidden-line)
消隐对象是物体上不可见的线,一般用于线框 图。当用笔式绘图仪或其它画线设备绘制图形时, 主要使用这种算法。
面消隐(Hidden-surface) 消隐对象是物体上不可见的面,一般用于填色 图。当用光栅扫描显示器绘制图形时,主要使用这 种算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
失去遮挡关系
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
本章目标
消隐的基本概念
重点掌握Z缓冲器(Buffer)消隐算法
23
10.3 画家算法
多边形的排序算法*
在规范投影坐标系里 uvn 中,投影方向是 n 轴的负方向,因 而 n 坐标大者距观察者更近。nmin(P)和 nmax(P) 分别为 P 各 顶点 n 坐标的最小和最大值。[投影为正平行投影]
1)将场景中所有多边形存入一个线性表,记为L; 2)如果L中仅有一个多边形,算法结束;否则根据每个多边形的nmin 对它们预排序。不妨假定多边形P落在L的表首,即nmin(P) 为最小。 再记 Q 为 L – {P} (表中其余多边形)中任意一个; 3)判别P, Q之间的关系,有如下二种: (1)对所有的Q,有nmax(P) < nmin (Q), 则多边形 P 的确距观察点 最远,它不可能遮挡别的多边形。令L = L – {P}, 返回第二步; (2)存在某一个多边形Q,使 nmax(P) > nmin (Q),需进一步判别:
主要包围盒
长方体 正方体 球
14
10.2 提高消隐算法效率的常用方法
作用—避免盲目求交
例如:两个空间多边形A、B在投影平面上的投影分别为A’,B’ ,因 为A’ 、B’ 的矩形包围盒不相交,则A’、B’ 不相交,无须进行遮挡测 试。 如果包围盒相交,需进一步测试。右下图(a)包围盒相交,投影也相交; (b)包围盒相交,投影不相交 一般情况下,判断两物体是否遮挡时,前一种情况大量存在,避免了 物体间的复杂相交测试。
24
10.3 画家算法
(A)若P, Q的投影 P’, Q’ 的包围盒不 相交(图a),则P, Q 在表中的次序不重 要,令L = L –{ P }, 返回2);否则进行 下一步
(B)若 P 的所有顶点位于 Q 所在平面 的不可见的一侧(图b) ,则P, Q关系正 确,令L = L – { P}, 返回 2);否则进 行下一步
剔除依据:背面总是被前向面所遮挡,从而不可见
前向面
V n V
后向面
N J G
F
H
A
I
n
E
B
JEAF、 HCBG、 JIHGF为 后向面
V
C
D
17
10.2 提高消隐算法效率的常用方法
5. 空间分割技术 遮挡判断依据:场景中的物体,它们的投影在投影平 面上是否有重叠部分?(是否存在相互遮挡的可能?) 对于根本不存在相互遮挡关系的物体,应避免这种不 必要的测试 原因:物体在场景中分散,有些物体的投影相距甚远, 不会存在遮挡关系 方法:将投影平面上的窗口分成若干小区域;为每个 小区域建立相关物体表,表中物体的投影于该区域有 相交部分;则在小区域中判断那个物体可见时,只要 对该区域的相关物体表中的物体进行比较
30
10.4 Z缓冲器算法
{
算法伪码
帧缓存全臵为背景色; 深度缓存全臵为最小 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)处; } } }
34
10.5 扫描线Z缓冲器算法
算法思想
在处理当前扫描线时,用一个一维数组作为当前扫描线的 Z-buffer。首先找出与当前扫描线相关的多边形,以及每 个多边形中相关的边对。 对每一个边对之间的小区间上的各像素,计算深度,并与 Z-buffer中的值比较,找出各像素处可见平面。(采用增 量算法计算深度) 写帧缓存。
15
10.2 提高消隐算法效率的常用方法
4. 背面剔除
外法向:规定每个多边形的外法向都是指向物体外部的
前向面:若多边形的外法向与投影方向(观察方向)的夹角为钝
角,称为前向面 后向面:若多边形的外法向与投影方向(观察方向)的夹角为锐 角,称为后向面(背面)
投影方向
夹角为180-u
16
10.2 提高消隐算法效率的常用方法
又称 Z-Buffer算法(深度缓冲 depth-buffer) 组成:
帧缓冲器 -- 保存各像素颜色值 Z 缓冲器 -- 保存各像素处物体深度值 Z 缓冲器中的单元与帧缓冲器中的单元一一对应
29
10.4 Z缓冲器算法
算法
(1)先将 Z 缓冲器中个单元的初始值臵为最小值。 (2)多边形投影时,当要改变某个像素的颜色值 时,首先检查当前多边形的深度值是否大于该像 素原来的深度值(保存在该像素所对应的Z缓冲 器的单元中), A:如果大于,说明当前多边形更靠近观察点,用 它的颜色替换像素原来的颜色;同时保存深度值 B:否则说明在当前像素处,当前多边形被前面所 绘制的多边形遮挡了,是不可见的,像素的颜色 值不改变
消隐的对象
三维物体 三维体的表示主要采用边界(多边形)表示 与观察物体有关,也与视点位臵和方向有关
消隐结果
线框图
消隐图
真实感图形
5
10.1 基本概念
消隐分类
消除隐藏面:确定可见面(消除不可见面)——表面表示 物体(本章讨论) 消除隐藏线:消除不可见线——线框表示物体
长方体线框投影图的二义性
{ 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分; }
8
第10章
隐藏面的消除
基本概念 提高消隐算法效率的常用方法 画家算法 Z缓冲器算法 扫描线Z缓冲器算法 扫描线算法 光线投射算法 OpenGL相关函数
9
10.2 提高消隐算法效率的常用方法
算法基本思想:
1)先把屏幕臵成背景色 2)将场景中的物体按其距观察点的远近进行排序,结果放 在一张线性表中;(线性表构造:距观察点远的称优先级 低,放在表头;距观察点近的称优先级高,放在表尾。该 表称为深度优先级表) 3)然后按照从远到近(从表头到表尾)的顺序逐个绘制物 体。
关键
如何对场景中的物体按深度(远近)排序,建立深度优先 级表?
25
10.3 画家算法
(C)若Q的所有顶点位于 P 所在平面的 可见的一侧(图c),则P, Q关系正确,令 L = L – { P }, 返回2);否则进行下一步
(D)对P, Q投影P’, Q’求交,若P’, Q’不 相交(图d),则P, Q在表中的次序不重要, 令L = L – { P }, 返回 2); 否则在它们所 相交的区域中任取一点,计算 P, Q在该 点的深度值,如果 P 的深度小,则P, Q 关系正确,令L = L – { P }, 返回 2);否 则交换P, Q, 返回3)
11
10.2 提高消隐算法效率的常用方法
(3)区域连贯性:区域指屏幕上一组相邻的像素,它们通 常为同一个可见面所占据,可见性相同。区域连贯性表现 在一条扫描线上时,即为扫描线上的每个区间内只有一个 面可见 (4)扫描线的连贯性:相邻两条扫描线上,可见面的
分布情况相似 (5)深度连贯性:同一表面上的相邻部分深度是相近 的,而占据屏幕上同一区域的不同表面的深度不同。 这样在判断表面间的遮挡关系时,只需取其上一点计 算出深度值,比较该深度值便能得出结果
18
10.2 提高消隐算法效率的常用方法
6. 物体的分层表示
表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降低算法复杂度
19
10.2 提高消隐算法效率的常用方法
方法: 将父节点所代表的物体看成子节点所代表物体的包 围盒,当两个父节点之间不存在遮挡关系时,就没有必 要对两者的子节点做进一步测试。父节点之间的遮挡关 系可以用它们之间的包围盒进行预测试
学会使用OpenGL的函数
3
10.1 基本概念
问题