图像空间的消隐算法
计算机图形学消隐算法
图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算法,以便于图形的快速生成和实时显示。
计算机图形学——隐藏线和隐藏面的消除(消隐算法)
计算机图形学——隐藏线和隐藏⾯的消除(消隐算法)⼀、概述由于投影变换失去了深度信息,往往导致图形的⼆义性。
要消除⼆义性,就必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯(或可见线判定、可见⾯判定),或简称为消隐。
经过消隐得到的投影图称为物体的真实感图形。
下⾯这个图就很好体现了这种⼆义性。
消隐后的效果图:消隐算法的分类所有隐藏⾯消隐算法必须确定:在沿透视投影的投影中⼼或沿平⾏投影的投影⽅向看过去哪些边或⾯是可见的两种基本算法1、以构成图像的每⼀个像素为处理单元,对场景中的所有表⾯,确定相对于观察点是可见的表⾯,⽤该表⾯的颜⾊填充该像素.适于⾯消隐。
算法步骤:a.在和投影点到像素连线相交的表⾯中,找到离观察点最近的表⾯;b.⽤该表⾯上交点处的颜⾊填充该像素;2、以三维场景中的物体对象为处理单元,在所有对象之间进⾏⽐较,除去完全不可见的物体和物体上不可见的部分.适于⾯消隐也适于线消隐。
算法步骤:a.判定场景中的所有可见表⾯;b.⽤可见表⾯的颜⾊填充相应的像素以构成图形;提醒注意1.假定构成物体的⾯不能相互贯穿,也不能有循环遮挡的情况。
2.假定投影平⾯是oxy平⾯,投影⽅向为z轴的负⽅向。
如果构成物体的⾯不满⾜该假定,可以把它们剖分成互不贯穿和不循环遮挡的情况。
例如,⽤图b中的虚线便可把原来循环遮挡的三个平⾯,分割成不存在循环遮挡的四个⾯。
⼆、可见⾯判断的有效技术1、边界盒指能够包含该物体的⼀个⼏何形状(如矩形/圆/长⽅体等),该形状有较简单的边界。
边界盒技术⽤于判断两条直线是否相交。
进⼀步简化判断2、后向⾯消除(Back-face Removal)思路:把显然不可见的⾯去掉,减少消隐过程中的直线求交数⽬如何判断:根据定义寻找外(或内)法向,若外法向背离观察者,或内法向指向观察者,则该⾯为后向⾯。
注意:如果多边形是凸的,则可只取⼀个三⾓形计算有向⾯积sp。
如果多边形不是凸的,只取⼀个三⾓形计算有向⾯积sp可能会出现错误,即F所在的⾯为前向⾯也可能出现sp≥0的情况,因此,需按上式计算多边形F的有向⾯积。
计算机图形学-习题库及答案
计算机图形学-习题库及答案1、计算机图形显⽰器和绘图设备表⽰颜⾊的⽅法各是什么颜⾊系统?它们之间的关系如何?1、计算机图形显⽰器是⽤RGB⽅法表⽰颜⾊,⽽绘图设备是⽤CMY⽅法来表⽰颜⾊的。
它们之间的关系是:两者都是⾯向硬件的颜⾊系统,前者是增性原⾊系统,后者是减性原⾊系统,后者是通过在⿊⾊⾥加⼊⼀种什么颜⾊来定义⼀种颜⾊,⽽后者是通过指定从⽩⾊⾥减去⼀种什么颜⾊来定义⼀种颜⾊2、简述帧缓存与显⽰器分辨率的关系。
分辨率分别为640×480,1280×1024,和2560×2048的显⽰器各需要多少字节位平⾯数为24的帧缓存?2、帧缓存的⼤⼩和显⽰器分辨率之间的关系是:帧缓存的⼤⼩=显⽰器分辨率的⼤⼩*帧缓存的3、画直线的算法有哪⼏种?画圆弧的算法有哪⼏种?c1)逐点⽐较法;(2)数值微分法;(3)Bresenham算法。
画弧线的常⽤⽅法有:(1)逐点⽐较法;(2)⾓度DDA法;(3)Bresenham算法。
4、分别写出平移、旋转、缩放及其组合的变换矩阵。
4、1)平移变换:其中, , , 是物体在三个坐标⽅向上的位移量。
2)旋转变换:绕Z轴旋转的公式为:绕X轴旋转的公式为:绕Y轴旋转的公式为:如果旋转所绕的轴不是坐标轴,设其为任意两点p1,p2所定义的⽮量,旋转⾓度为。
则可由7个基本变换组合构成:1.使p1,点与原点重合;2.,使轴p1p2落⼊平⾯xoz内;3.,使p1p2与z轴重合;4.,执⾏绕p1p2轴的⾓旋转;5.,作3的逆变换;6.,作2的逆变换;7.作1的逆变换。
3)缩放变换:其中,,,是物体在三个⽅向上的⽐例变化量。
记为。
若对于某个⾮原点参考点进⾏固定点缩放变换,则通过如下的级联变换实现:5、如何⽤⼏何变换实现坐标系的变换?坐标系的变换,亦即将某⼀坐标系lcs1中的点变换为另⼀个坐标系lcs2下的坐标。
若,矩阵的推导分三步。
1)将lcs1中的点变换到世界坐标系的矩阵 ;x_axis, y_axis, z_axis 为lcs1中x,y,z轴⽮量在世界坐标系的表⽰org为lcs1中原点在世界坐标系的表⽰2)将世界坐标系的点变换到lcs2中的点矩阵 ;x_axis, y_axis, z_axis 为lcs1中x,y,z轴⽮量在世界坐标系的表⽰org为lcs1中原点在世界坐标系的表⽰a = - x_axis.x * org.x - x_axis.y * org.y - x_axis.z * org.zb = - y_axis.x * org.x - y_axis.y * org.y - y_axis.z * org.zc = - z_axis.x * org.x - z_axis.y * org.y - z_axis.z * org.z6、写出⼏种线裁剪算法;写出⼏种多边形裁剪算法。
第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)
消隐及真实感处理技术课件
深度缓存算法
是一种典型的、也是最简单的图象空间消隐算法。
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)
常用的消隐算法及总结
常用的消隐算法及总结数学092邹继瑶 090064摘要:用计算机生成三维物体的真实图形是计算机图形学研究的重要内容。
真实图形在仿真模拟、几何造型、广告影视、指挥控制和科学计算的可视化等许多领域都有广泛应用。
经过消隐得到的投影图称为物体的真实图形。
较常用的消隐算法有画家算法、Z-Buffer算法及其它一些改进算法。
消隐算法从算法基本思想、算法描述和算法步骤等方面对画家算法、Z-Buffer算法和其它改进算法进行了分析,并得出了它们相关的特点。
关键词:计算机图形学消隐景物空间消隐图像空间消隐算法引言:近年来,产生真实的虚拟环境是计算机图形学孜孜以求的目标。
在虚拟对象或场景的创建中要用到许多综合处理过程,每一种都非常令人感兴趣也非常重要。
计算机辅助设计、科学可视化、模拟训练、医疗成像、娱乐、广告等等,所有的这些,都要依赖于当今最前沿的计算机图形技术。
伴随着计算机硬件、软件的飞速发展,计算机图形学技术也得到了质的飞跃。
特别是面向对象技术和多媒体技术取得的成功,使得图形学成为计算机软件业中一个重要的分支。
而程序设计方法、数据库系统和人工智能等新技术渗入到计算机图形学领域,又为计算机图形学提供了更加宽阔的发展空间和强劲动力。
计算机图形学是研究通过计算机将数据转换成图形,并在专用显示设备上显示的原理、方法和技术的学科。
主要介绍了计算机图形系统的基本知识,图形生成与显示的算法,图形的表示与图形的数据结构,图形的几何变换与投影变换,图形的裁剪技术,图形消隐处理,真实感图形的生成等内容。
面消隐作为图形学中一个分支是本文的一个重要的研究内容。
一.消隐的基本概念由于屏幕上的一些图元被另一些图元挡住所造成的。
例如,当需要描绘一个由多边形面组成的三维物体时,那么它的一部分必然要被挡住,要在屏幕上显示的必须是可见的东西。
打个比方,对于一个立方体,无论从哪个方向进行透视处理,最多只能看到其中的三个面。
这样,就要想出一种方法来决定哪些面是所能看到的。
景物空间消隐算法研究综述
多边形区域算法
平面多边形的裁剪算法
如图:多边形P由9条有向边围 成,其中,e1、e2、e3、e4 和e5组成多边形的外环,e6、 e7、e8和e9组成多边形的内 环。沿边的方向前进,多边形 的内域总是在前进方向的左侧。这样,多边形 的内环方向与外环的方向总是相反的。
多边形区域算法
平面多边形的裁剪算法
消隐算法将内部多边形的各个顶点的X 坐标和Y坐标代入多边形A和B的平面 方程中,求出A和B重叠部分的各顶点 的Z值,据此比较其深度,确定Pin 是否 要选为新的 P ,去裁剪其他的多边形。
c
多边形区域算法
多边形区域排序算法可描述如下: (1)初步的深度排序:搜索各多边形 Pk (k=1,2,...,n)各顶点的Z的最小值,并按 其大小将多边形作初步排序。 (2)以当前深度最小(即具有最小Z值,也即离视点最近)的多边形作为裁剪多 边形 Pc 。 (3)用Pc 对多边形序列中那些深度更大的主多边形 Ps 进行裁剪,产生内部多边 形 Pin和外部多边形 Pout。 (4)比较 Pc 和内部多边形 Pin 的深度,检查是否离视点较近的多边形。如果不是, 则选择为新的裁剪多边形 Pin,重新回到(3)。 (5)在多边形序列中,选择下一个深度最小的多边形作为裁剪多边形,从(3)开 始重复做,直至所有的多边形都处理完为止。 (6)在输出的多边形中,除去所有内部多边形外,其余的多边形均是可见多边 形。
BSP树算法
经过平面P1和P2的分割,则可生成如 下的BSP树:
BSP树算法
对于由多边形面组成的对象,可以选 择与多边形面重合的分割面,利用平 面方程来区分后面的和前面的多边形 顶点。 一旦BSP树创建完毕,即可按先右节 点后左节点的次序遍历该树。该树上 的面按由后往前次序显示,由此前面 的对象覆盖后面的对象。
计算机图形学消隐
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(每个多边形) {
计算机图形学消隐算法
隐藏线(面)的消除的两种基本算法
第一种是物空间算法。 • 它以三维场景中的物体对像作为处理单元的,在所
有的对像之间进行比较,除去完全不可见的的物体 和物体上不可见的部分。常用于线框表示立体的线 隐藏,也用于面隐藏。
• 特点是:算法精度低,只能达到屏幕精度为止,但速度往
往更高。 其算法是对每一个像素:
在和投影点到像素的连线相交的表面中找到离观察点最近 的表面
用该表面上交点处的颜色填充该像素。
for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表 面的颜色来显示像素}
算法复杂度
假设场景中有k个物体,平均每个物体表面 由h个多边形构成,显示区域中有m x n个像素, 则:
2
<=
<=
N . V时<0 不可见
、空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有相互遮挡的重叠部分? 对于根本不存在相互遮挡关系的物体,应 避免这种不必要的测试。
9
象空间消隐算法: 这类算法对屏幕上的每个象素进行判断,以决有 m×n个象素点,每个物体表面上有h个多边形,则该 类消隐算法计算量正比于mnh。
则: k个物体的算法复杂度为: O(mnkh) 。
10
算法排序
各种消隐算法均采用一定形式的几何排序。通过排序 ,可搜查出位置上靠近观察者的几何元素,确定几何元 素之间在位置上的遮挡关系,解决消隐计算的主要问题 。各种算法都有各自的排序方法和排序次序。排序次序 影响算法的效率。
二、 消隐基本技术
第10讲 图形消隐
1 0 T2 0 0
21
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),需进一步判别:
27
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)处; } } }
关键
如何对场景中的物体按深度(远近)排序,建立深度优先 级表?
19
10.3 画家算法
世界坐标系
用户用来定义图形的坐标系,主要用于计算机图形场 景中所有图形对象的空间定位和定义。
观察坐标系
消隐算法(一)——Z-buffer算法
消隐算法(⼀)——Z-buffer算法第四讲消隐算法⼀、消隐消隐:(消除⼆义性)就是必须在绘制时消除被遮挡的不可见的线或⾯,习惯上称作消除隐藏线和隐藏⾯;消隐不仅与消隐对象有关还与观察者的位置有关。
1.1消隐的分类1.1.1按消隐对象分类(1)线消隐:消隐对象是物体上的边,消除的是物体上不可见的边。
(2)⾯消隐:消隐对象是物体上的⾯,消除的是物体上不可见的⾯,通常做【真实感图形】消隐时⽤⾯消隐。
1.1.2按消隐空间分类(1)物体空间消隐算法:以场景中的【物体】为处理单元,假设场景中有k个物体,将其中⼀个物体与其余k-1个物体逐⼀⽐较,仅显⽰它可见表⾯以达到消隐的⽬的,通常⽤于【线框图】的消隐。
1.Roberts算法:要求所有被显⽰的物体都是凸的,对于凹体要先分割成多个凸体的组合。
【计算量甚⼤】2.光线投射法:⼀条视线与场景中的物体可能有许多交点,求出这些交点后需要排序,在前⾯的才能被看到。
光线投射:是求光线(视线,如视点与象素连成的线)与场景的交点。
(2)图像空间消隐算法:以屏幕窗⼝内的每个【象素】为处理单元。
确定在每⼀个象素处,场景中的k个物体哪⼀个距离观察点【最近】,从⽽⽤它的颜⾊来显⽰该象素。
【消隐算法的主流】画家算法:要做到去除隐藏⾯的最简单的⽅法。
如果⼀个场景中有许多物体,就是先画远的东西,再画近的东西。
这样⼀来,近的东西⾃然就会盖住远的东西。
这张图⽚由于三个部分互相叠加,⽆法判断谁最远谁最近,所以⽤画家算法就⽆法解决。
——>画家算法只能解决【简单场景】的消隐问题。
1.Z-buffer算法(深度缓冲器算法)帧缓冲器对应数组:intensity(x,y)——>属性数组(帧缓冲器)存储图像每个空间可见象素的光强或颜⾊深度缓冲器对应数组:depth(x,y)——>深度数组(z-buffer)存放图像空间每个可见象素的z坐标假设xoy⾯为投影⾯,z轴为观察⽅向,过屏幕上任意象素点(x,y)做平⾏于z轴的射线R,与物体表⾯相交于p1,p2点,p1和p2点的z值称为该点的深度值,z-buffer算法⽐较p1和p2的z值,将最⼤的z值存⼊z缓冲器中,显然屏幕上(x,y)显⽰p1点的颜⾊。
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)。 否则, 否则,不作任何操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章:真实感图形学
• Southerland根据消隐空间的不同,将消隐算法分为三类: 1. 物体空间的消隐算法 (光线投射、Roberts)
将场景中每一个面与其他每个面比较,求出所有点、边、 面遮挡关系。 2. 图像空间的消隐算法 (Z-buffer、扫描线、warnock) 对屏幕上每个象素进行判断,决定哪个多边形在该象素可 见。 3. 物体空间和图像空间的消隐算法 (画家算法) 在物体空间中预先计算面的可见性优先级,再在图像空间 中生成消隐图。
if(Ei 被分成若干段) { 取其中的一段作为当前段; 将其它段及相应的j压栈
}
第九章:真实感图形学
• 如果消隐对象有N条棱,当N很大时,用两两求交的方法 工作量很大O(N2)。为提高算法效率,要设法减少求交的 工作量。 • 设V为由视点出发的观察向量,N为某多边形面的法向量。 若V·N>0,称该多边形为后向面。若V·N<0,称该多边形 为前向面。如下图中的JEAF、HCBG和DEABC所在的面 均为后向面。 • 后向面总是看不见的,由于后向面的遮挡,别的棱成为 不可见-》可以把后向面去掉,并不影响消隐结果。
第九章:真实感图形学
• 线消隐中最基本的运算 判断面对线的遮挡关系。体也要分解为面,再判断 面与线的遮挡关系ห้องสมุดไป่ตู้在遮挡判断中,要反复地进行 线线、线面之间的求交运算。
图9.5 遮挡关系
第九章:真实感图形学
• 平面对直线段的遮挡判断算法
不失一般性,取视点在Z轴正无穷远,视线为 Z轴负方向,物体投影到XOY平面上。
基本数据结构: 面表(存放参与消隐的面) + 线表(存放待显示的线)
HiddenLineRemove() { 坐标变换; for(对每个面Fj)
for(Fj的每一条边Ei) 将二元组< Ei ,j>压入堆栈 While(栈不空) { < Ei ,j0> = 栈顶;
for(j!= j0的每一个面Fj) { if( Ei 被Fj 全部遮挡) { 将Ei 清空; break; } if( Ei 被Fj 部分遮挡) { 从Ei 中将被遮挡的部分裁掉;
第九章:真实感图形学
➢ 9.1 消隐
➢真实图形在仿真模拟、几何造型、广告影视、指挥控制 和科学计算的可视化等许多领域有广泛应用。
➢用计算机生成三维物体的真实图形,是计算机图形学研 究的重要内容。
➢显示设备描述物体的图形时,必须把三维信息经过某种 投影变换,在二维的显示表面上绘制出来。由于投影变 换失去了深度信息,往往导致图形的二义性(如图9.1所 示)。要消除二义性,就必须在绘制时消除被遮挡的不可 见的线或面,称作消除隐藏线和隐藏面,或简称为消隐。 经过消隐得到的投影图称为物体的真实图形。
第九章:真实感图形学
图9.1 长方体线框投影图的二义性
图9.2线框图
图9.3 消隐图
图9.4真实感图形
第九章:真实感图形学
消隐的分类 消隐的对象是三维物体。 三维体的表示:边界表示和CSG(结构实体几何学)表示等。 最简单的表示方式:用表面上的平面多边形表示。如物体的 表面是曲面,则将曲面用多个平面多边形近似。 消隐结果与观察物体有关,也与视点有关。 • 按消隐对象分类 1. 线消隐 消隐对象是物体上的边,消除物体上不可见的边。 2. 面消隐 消隐对象是物体上的面,消除物体上不可见的面。
第九章:真实感图形学
消除隐藏线 • 对造型的要求 在线框显示模型中,用边界线表示有界平面,用边界线及若 干参数曲线表示参数曲面,所以待显示的所有实体均为线。 但线不可能对线有遮挡关系,只有面或体才有可能对线形成 遮挡。故消隐算法要求造型系统中有面的信息,最好有体的 信息。正则形体的消隐可利用其面的法向量,比一般情况快 的多。 • 坐标变换 为运算方便,一般通过平移、旋转、透视等各种坐标变换, 将视点变换到Z轴的正无穷大处,视线方向变为Z轴的负方向。 变换后,坐标Z值反映了相应点到视点的距离,作为判断遮 挡的依据。 对视角以外的物体应先行虑掉,减少不必要的运算。
5. 以上所求得的各交点将线段的投影分成若干段,求出 第一段中点。
6. 若第一段中点在平面的投影内,则相应的段被遮挡, 否则不被遮挡;其他段的遮挡关系可依次交替取值进 行判断。
7. 结束。
第九章:真实感图形学
图9.6 视点与线段同侧
图9.7 包围盒不交
图9.8 分段交替取值
第九章:真实感图形学
• 线消隐算法
第九章:真实感图形学
图 9.9 (a)前向面 (b)后向面
(c)多面体的隐藏线消除
第九章:真实感图形学
消除隐藏面 使用光栅图形显示器绘制物体的真实图形时,必须解决消除 隐藏面的问题。 1. 画家算法(列表优先算法) 先把屏幕置成背景色,再把物体的各个面按其离视点的远近 进行排序,离视点远者(Z最小)在表头,离视点近者(Z最大) 在表尾,排序结果存在一张深度优先级表中。从表头到表尾 逐个取出多边形投影到屏幕并显示多边形包含的实心区域。 由于后显示的图形取代先显示的画面,而后显示的图形所代 表的面离视点更近,所以由远及近的绘制各面,就相当于消 除隐藏面。这与油画作家作画的过程类似,先画远景,再画 中景,最后画近景。
1. 若线段的两端点及视点在给定多边形的同侧, 线段不被其遮挡,转7(结束)。(深度检测, 多边形顶点的最大Z坐标小于等于线段端点的 最小Z坐标,多边形完全在线段之后,不可能 遮挡线段,即线段完全可见)
2. 若线段的投影与多边形投影的包围盒(覆盖多 边形投影的最小矩形区域)无交,线段不被给 定多边形遮挡,转7(结束)。
第九章:真实感图形学
• 检验深度优先级表中相邻面的顺序 ① 深度重叠判断 若P,Q是 深 度优先 级 表中两 个 相邻的 多 边形 , 且Zmax(P)≥ Zmin(P)≥Zmax(Q),则Q不可能遮挡P的任何部分,可以在P之 前画出。完成这一测试需使多边形数据结构包括所有顶点 的最小和最大Z坐标。 ② 投影重叠判断 如果P和Q在XY平面上的投影的包围盒不重叠,则P,Q不可 能互相遮挡,其顺序无关紧要。完成这一测试需把最大和 最小的X,Y坐标存在面的数据表里。
3. 求直线与相应多边形的交。若无交点,转4。 否则,交点在线段内部或外部。若交点在线 段内部,交点将线段分成两段,与视点同侧 的一段不被遮挡,另一段在视点异侧,转4再 判;若交点在线段外部,转4。
第九章:真实感图形学
4. 求所剩线段(可能被遮挡部分)的投影与多边形边界投影 的所有交点,并根据交点在原直线参数方程中的参数 值求出Z值(即深度)。若无交点,转5。