计算机图形学消隐

合集下载

计算机图形学消隐算法

计算机图形学消隐算法

图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章消隐

计算机图形学课件:第9章消隐

9.6 BSP树算法
算法原理 实例说明
Q back front
D C
B
投影线
P
front P
back
front
Q front
back Q front
A
back
back
DB
CA
(a) 空间剖分
(b) 形成的BSP树
图9-14 BSP算法原理
9.7 多边形区域排序算法
算法思想:
将多边形按深度值由小到大排序,用前面 的可见多边形去切割位于其后的多边形,使得最 终每一个多边形要么是完全可见的,要么是完全 不可见的。
Z-buffer
00 0 0 0 0 0 00 0 0 0 58000 0 0 00 0 0 0
帧缓存
问题:计算采样点(x,y)的深度z(x,y)。 假定多边形的平面方程为:Ax+By+Cz+D=0。
z(x, y) Ax By D C
利用连贯性加速深度的计算:
y 多边形
y
y-1
算法特点: ①算法简单。 ②需较大的存储空间。 ③处理反走样、透明和半透明效果困难。
对于③ ,可以使用A缓冲器算法克服。
9.2 区间扫描线算法
算法原理:
避免对被遮挡 区域的采样是 进一步提高扫 描线算法计算 效率的关键。
y B2 A2
0
A1 B1
AB
A3
B3
C2
扫描线1 C1
扫描线2 扫描线3
B4 C C4 C3 x
图9-3 区间扫描线算法原理
9.3 深度排序算法(画家算法)
算法原理:
若场景中任何多边形在深度上均不贯穿 或循环遮挡,则各多边形的优先级顺序可完 全确定,扫描转换就可以按从优先级低的多 边形到优先级高的多边形的顺序进行。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

计算机图形学 消隐

计算机图形学 消隐
第十一讲 面消隐
?基本概念 ?提高消隐算法效率的常见方法 ?画家算法 ?Z缓冲器算法 ?扫描线Z缓冲器算法 ?区域子分算法 ?光线投射算法
-
基本概念
产生真实感的方法之一: 反映三维场景中的相互遮挡关系
面消隐与线消隐
表面模型与线框模型 物体表面:平面与曲面 面消隐对象: 由平面多边形构成的多面体
-
基本概念
2)然后按照从表头到表尾的顺序逐个绘制物 体。
-
画家算法
关键:如何对场景中的物体按深度(远 近)排序,建立深度优先级表? 一种针对多边形的排序算法如下:
假定在规范化投影坐标系uvn中,投影方向是n 轴的负向,因而n坐标大距观察者近。记nmin(P) nmax(P)分别为多边形P的各个顶点n坐标的最小 值和最大值,算法步骤如下:
-
提高消隐算法效率的常见方法 1
利用连贯性
物体连贯性 面的连贯性 区域连贯性 扫描线的连贯性 深度连贯性
-
提高消隐算法效率的常见方法 2
将透视投影转换成平行投影 消隐与透视关系密切,体现有:
1)消隐必须在投影之前完成; 2)物体之间的遮挡关系与投影中心(视点)的选 取有关; 3)物体之间的遮挡关系与投影方式有关
-
提高消隐算法效率的常见方法 3
图12.3 加入面消隐步骤的三维图形显示 流程图 p285 (参见图8.30 p162)
图12.4 先将透视投影转换成平行投影,南 后再消隐 p285 (参见图8.33 p167)。 (避免除法,提高了效率)
-
提高消隐算法效率的常见方法 4
包围盒技术
定义:一个形体的包围盒指的是包围它的简单形体。
-
提高消隐算法效率的常见方法 6
复杂度比较:

计算机图形学-消隐

计算机图形学-消隐
跨入计算机殿堂的入门篇
计算机图形学 施智平
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

计算机图形学实验报告消隐

计算机图形学实验报告消隐

计算机图形学实验报告计算机图形学实验报告姓名徐沛华班级1011 学号20101851 成绩实验名称消隐——扫描线算法实验目的1.消除物体在平面上展现的二义性2.掌握扫描线算法实验步骤基本思想:按扫描线顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的象素,即完成填充工作。

对于一条扫描线填充过程可以分为四个步骤:(1) 求交:计算扫描线与多边形各边的交点(2) 排序:把所有交点按x 坐标递增顺序来排序(3) 配对:确定扫描线与多边形的相交区间,第一个与第二个,第三个与第四个等等,每对交点代表扫描线与多边形的一个相交区间(4) 填充:显示相交区间的象素实验代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<graphics.h>void draw(int x1,int y1,int x2,int y2,int delta){int nx1,ny1,nx2,ny2;nx1=x1,ny1=y2-delta,nx2=x1+delta,ny2=y2;while((ny1>=y1)&&(nx2<=x2)){line(nx1,ny1,nx2,ny2);ny1-=delta;nx2+=delta;}if(nx2>x2){ny2-=nx2-x2;nx2=x2;while(ny1>y1){line(nx1,ny1,nx2,ny2);ny1-=delta;ny2-=delta;}nx1+=y1-ny1;ny1=y1;while(nx1<x2){line(nx1,ny1,nx2,ny2);nx1+=delta;ny2-=delta;}}else{nx1+=y1-ny1;ny1=y1;while(nx2<x2){line(nx1,ny1,nx2,ny2);nx2+=delta;nx1+=delta;}ny2-=nx2-x2;nx2=x2;while(ny2>y1)}ny2-=nx2-x2;nx2=x2;while(ny2>y1){line(nx1,ny1,nx2,ny2);ny2-=delta;nx1+=delta;}}}int main(void){int x1,y1,y2,x2,delta;int driver=DETECT,mode;printf("Please input lefttop(x1,y1) and rightbottom(x2,y2) of rectangle and delta:\n"); scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&delta);initgraph (&driver,&mode,"C:\\TC");rectangle(x1,y1,x2,y2);draw(x1,y1,x2,y2,delta);gotoxy(1,1);printf("Press any key to exit!");getch();closegraph();return 0;}。

计算机图形学-消隐

计算机图形学-消隐
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)“消隐”?
将三维场景绘制在计算机二维显示屏上必须经过投影变换,投影 变换将三维信息变换到二维平面上,这个过程中深度信息被丢失, 生成的图形往往具有二义性。

计算机图形学第八章

计算机图形学第八章
深度相关性:物体的同一表面上的相邻部分深度是相近的。
2. 包围盒技术 用于对物体间的某些关系进行比较和测试,从而可避免盲
目的求交运算,减少计算量,提高效率。 二维图形 ----- 包围框(重叠测试); 三维物体 ----- 包围盒、包围球。
3. 背面剔除 一个平面多面体的表面由若干个
平面多边形构成,若一个多边形表面 的外法线方向与投影方向(观察方向) 的夹角为钝角,则该面为前向面;若 其夹角为锐角,则为后向面或背面。
后续各点的深度值。
jz
o
i i+1
x
③ 计算多边形边界上(对应于边的投影与扫描线交点处)的深
度值
设 L 为多边形 Fk的一条边,与扫描线 j 的交点为 Xj ,
则多边形 Fk 在交点( Xj ,j )处的深度为:
axj + bj + d
Zj =—
c
当扫描线向上移动一条,即 y=j+1 时,边 L 与扫描线的交
扫描线数相同。
4
3
根据各边两端点中较 2



1
小的 y 坐标,将其放入
ⅡYmaxΔX X z


相应的桶内。
④ 有效边表 AET(边活化表) 记录多边形边界与当前扫描线相交的各个边对的信息。 xl:左交点的x坐标值;
Δxl:左交点所在边和相邻扫描线交点的x坐标之差; ylmax:左侧边两端点中较大的 y 值; xr,Δxr, yrmax :右交点对应的三个量; zl:左交点处多边形所在平面的深度值; Δzx:沿扫描线向右走过一个象素时,多边形所在平面深度的增
D
C
A
B
投影方向
4. 活化表技术 ( active list ) 设置活化表,用于存放与当前的处理相关的信息,从而可

第九讲 消隐

第九讲 消隐

2 . 遍历BSP树,优先绘制标为Back的区域;
P1
front
P2
back
P3
front
back
back front
A
B
C
D
绘制的顺序:D C
B
A
四. 深度缓冲器算法( Z-Buffer算法) 帧缓冲器:用来存储图像中每个象素属性(颜色); Z缓冲器:用来存储图像空间中每一个可见象素所对应 物体的深度(或Z坐标),是一个独立的深度缓冲器。
1. 将场景中的多边形序列按其z坐标的最小值zmin (物体上离视点最远的点)进行排序
2.当物体间 的z值范围不 x 重叠时:假设多边形P的 P zmin在上述排序中最小, Pzmax 如果多边形P的z值范围 与Q的z值范围不重叠, Qzmin Q 即Pzmax< Qzmin,此时 z 可以断定多边形P的优先 物体间的z值范围不重叠 级最低
3.当物体间的z值范围重叠时: 进一步判断多边形P是否遮挡场景中多边形Q
x P Q z
物体间的z值范围重叠
作如下5个判别步骤
• • • • • 多边形P和Q的x坐标范围是否不重叠 多边形P和Q的y坐标范围是否不重叠 从视点看去,多边形P是否完全位于Q的背面 从视点看去,多边形Q是否完全位于P的正面 多边形P和Q在xy平面上的投影是否不重叠
使用BSP树对场景中的对象进行排序
P3 C
D P1
P1
front
P2
back
P3
B P2 A
front
back
back front
A
B
C
D
1. 构建场景的BSP树 依据当前视点所在位置,对场景中的每个分割面 所生成的两个子空间进行分类 包含视点的标为Front,后面的标为Back 被分割面穿过的物体,被划分成两个部分,例如: 上图中的C物体被分割面P1划分成C,B两部分

计算机图形学消隐

计算机图形学消隐
计算机图形学
第7章 消 隐
第7章 消 隐
• • • • • • 消隐的概述 多面体的消隐算法 深度缓冲器算法 扫描线算法 画家算法 光线追踪算法(Ray Casting)
消隐概述
• 什么是消隐? • 消隐的分类有哪些? • 消隐的基本原则有哪些?
消隐的概述
• 绘制线框图时应消除隐藏线,绘制真实感图 形时应消除隐藏面。 • 未经消除隐藏线和隐藏面的立体图往往存在
图7-9 任意多面体的隐藏情况
深度缓冲器算法
• • • • 算法基本思想是什么? 算法是怎样描述的? 深度值如何计算? 深度缓冲器算法特点是什么?
多面体的消隐算法
• 算法实现的一般步骤 • 根据表面的数据结构,取顶点数据,计算表面 的外法线矢量。 • 计算外法线在投影方向上的分量的值。 • 根据分量的值判断表面的可见性。 • 若表面可见画出该表面,否则处理下一个表面。
多面体的消隐算法
• 任意多面体的消隐 • 对于任意平面立体必须寻求适当的消隐算法。 因为任意平面立体则不同,除了有全部可见和 全部不可见的棱边外,还有部分可见的棱边如 图7-9 。
消隐的概述
• 图像空间消隐算法 图像空间是物体显示时所在的屏幕坐标空 间。 • 算法描述如下: for(窗口中的每一个像素) { 确定距视点最近的物体,以该物体表面的 颜色来显示像素; }
消隐的概述
• 消隐基本原则
―排序
排序的目的主要是判别消隐对象的体、面、边和点与观察 点几何距离的远近。如果一个物体离观察点越远,越有可能被 离观察点近的物体所遮挡,如图7-4所示。但这不是绝对的,例 如,不在同一观察线方向的两个物体不会有遮挡关系,如图7-5 所示。
• 凸多面体消隐的基本原理是什么 • 凸多面体消隐的算法思想是什么 • 任意多面体的消隐算法是什么

计算机图形学消隐

计算机图形学消隐
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(每个多边形) {

计算机图形学消隐算法

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

2
<=

<=

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

计算机图形学 第7章消隐 - 课程教学辅导资料

计算机图形学 第7章消隐 - 课程教学辅导资料
计算机图形学
扫描线Z-buffer算法

改进之一:将窗口分割成扫描线

Z缓冲器的单元数只要等于一条扫描线内像素的个数就可以了。
计算机图形学
扫描线Z-buffer算法

改进之一:将窗口分割成扫描线

Z缓冲器的单元数只要等于一条扫描线内像素的个数就可以了。
计算机图形学
扫描线Z-buffer算法

改进之一:将窗口分割成扫描线


nu :当沿扫描线u递增一个像素时,多边形所在平面n坐标的增 量,对方程au+bv+cn+d=0来说,nu =-a/c nv :当沿扫描线v递增一个像素时,多边形所在平面n坐标的增 量,类似,nv =-b/c (c!=0) nextEP:指向下一个边对结构的指针。

计算机图形学
扫描线Z-buffer算法--活化边表对
长方体线框投影图的二义性
计算机图形学
基本概念


消隐的对象是三维物体。三维体的表示主要有边 界表示和CSG表示等。 消隐结果与观察物体有关,也与视点有关。
线框图
消隐图
真实感图形
计算机图形学
消隐的分类

按消隐对象分类


线消隐 消隐对象是物体上的边,消除的是物体上不可见的边 面消隐 消隐对象是物体上的面,消除的是物体上不可见的面

计算机图形学
扫描线Z-buffer算法--边的分类表

边的分类表(ET):当一个多边形进入活化多边形表时,需为其建立 一个边分类表(ET)。这里,ET与其在扫描转换多边形的扫描线算 法中的含义相同,是对多边形的非水平边进行分类的一维数组,长度 等于绘图窗口内扫描线的数目。若一条边在投影平面上的投影的下端 点的v坐标为v,则将该边归为第v类。

计算机图形学 消隐

计算机图形学 消隐
算法复杂度 假设场景中有k个物体,平均每个物体表 面由h个多边形构成,显示区域中有m x n 个像素,则: 第一种算法的复杂度为:O(mnkh) 第二种算法的复杂度为:O((kh)*(kh))
提高消隐算法效率的常见方法
利用连贯性 将透视投影转换成平行投影 包围盒技术 背面剔除 空间分割技术 物体分层表示
提高消隐算法效率的常见方法 3
图12.3 加入面消隐步骤的三维图形显示 流程图 p285 (参见图8.30 p162) 图12.4 先将透视投影转换成平行投影,南 后再消隐 p285 (参见图8.33 p167)。 (避免除法,提高了效率)
提高消隐算法效率的常见方法 4
包围盒技术
定义:一个形体的包围盒指的是包围它的冲器算法与扫描线Z缓冲器算法中
都是将像素孤立来考虑,未利用相邻像素之间 存在的属性的连贯性,即区域的连贯性,所以 算法效率不高。实际上,可见多边形至少覆盖 了绘图窗内的一块区域。如果能将这类区域找 出来,则避免了在每个像素处计算深度值,消 隐问题也就解决了。
区域子分算法
算法基本思路:首先将场景中的多边形投影
消隐算法的分类 1)类:以窗口内的每个像素为处理单元;
for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表面的颜色来显示像 素}
2)类:以场景中的物体为处理单元;
for (场景中的每一个物体) { 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分; }
基本概念
提高消隐算法效率的常见方法 6
空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有重叠部分?(是否存在相互遮挡的可能?)对 于根本不存在相互遮挡关系的物体,应避免这种不必 要的测试。 方法:将投影平面上的窗口分成若干小区域;为 每个小区域建立相关物体表,表中物体的投影于该区 域有相交部分;则在小区域中判断那个物体可见时, 只要对该区域的相关物体表中的物体进行比较即可。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CHENLI
5
提高消隐算法效率的常见方法 1
利用连贯性
物体连贯性 面的连贯性 区域连贯性 扫描线的连贯性 深度连贯性
CHENLI
6
提高消隐算法效率的常见方法 2
将透视投影转换成平行投影 消隐与透视关系密切,体现有:
1)消隐必须在投影之前完成; 2)物体之间的遮挡关系与投影中心(视点)的选 取有关; 3)物体之间的遮挡关系与投影方式有关
第十一讲 面消隐
?基本概念 ?提高消隐算法效率的常见方法 ?画家算法 ?Z缓冲器算法 ?扫描线Z缓冲器算法 ?区域子分算法 ?光线投射算法
CHENLI
1
基本概念
产生真实感的方法之一: 反映三维场景中的相互遮挡关系
面消隐与线消隐
表面模型与线框模型 物体表面:平面与曲面 面消隐对象: 由平面多边形构成的多面体
CHE口内的每个像素为处理单元;
for (窗口内的每一个像素) { 确定距视点最近的物体,以该物体表面的颜色来显示像
素}
2)类:以场景中的物体为处理单元;
for (场景中的每一个物体) { 将其与场景中的其它物体比较,确定其表面的可见部分; 显示该物体表面的可见部分;
13
画家算法
由来:画家的作画顺序暗示出所画物体之间的
相互遮挡关系
算法基本思路:
1)先将场景中的物体按其距观察点的远近进 行排序,结果放在一张线性表中;(线性表构造:
距观察点远的称优先级低,放在表头;距观察点 近的称优先级高, 放在表尾。该表称为深度优先级表)
2)然后按照从表头到表尾的顺序逐个绘制物 体。
}
CHENLI
3
基本概念
算法复杂度 假设场景中有k个物体,平均每个物体表 面由h个多边形构成,显示区域中有m x n 个像素,则:
第一种算法的复杂度为:O(mnkh) 第二种算法的复杂度为:O((kh)*(kh))
CHENLI
4
提高消隐算法效率的常见方法
利用连贯性 将透视投影转换成平行投影 包围盒技术 背面剔除 空间分割技术 物体分层表示
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;否则进行下一步。
step 3.2.4 对P,Q投影P’,Q’求交,若P’,Q’不相交,则P,Q在表中的次序不 重要,令L = L – {P}, 返回step 2;否则在它们所相交的区域中任取一点,计算
CHENLI
7
提高消隐算法效率的常见方法 3
图12.3 加入面消隐步骤的三维图形显示 流程图 p285 (参见图8.30 p162)
图12.4 先将透视投影转换成平行投影,南 后再消隐 p285 (参见图8.33 p167)。 (避免除法,提高了效率)
CHENLI
8
提高消隐算法效率的常见方法
4
包围盒技术
15
画家算法
Step 1:将场景中所有多边形存入一个线性表(链表或数组),记为L;
Step 2: 如果L中仅有一个多边形,算法结束;否则根据每个多边形的nmin对它们预 排序。不妨假定多边形P落在表首,即nmin(P)为最小。再记Q为L – {P}(表中其 余多边形)中任意一个;
Step 3: 判别P, Q之间的关系,有如下二种:
P,Q在该点的深度值,如果P的深度小,则P,Q关系正确,令L = L – {P}, 返回 step 2;否则交换P,Q,返回step 3.
CHENLI
11
提高消隐算法效率的常见方法 6
复杂度比较:
不妨假定每个小区域的相关物体表中平均有h个物 体,场景中有k个物体,由于物体在场景中的分布是分 散的,显然h远小于k。根据第二种消隐方法所述,其 算法复杂度为O(h*h),远小于O(k*k)。
CHENLI
12
提高消隐算法效率的常见方法 7
CHENLI
14
画家算法
关键:如何对场景中的物体按深度(远 近)排序,建立深度优先级表? 一种针对多边形的排序算法如下:
假定在规范化投影坐标系uvn中,投影方向是n 轴的负向,因而n坐标大距观察者近。记nmin(P) nmax(P)分别为多边形P的各个顶点n坐标的最小 值和最大值,算法步骤如下:
CHENLI
物体分层表示
表示形式:模型变换中的树形表示方式 原理:减少场景中物体的个数,从而降低算法复杂度。 方法: 将父节点所代表的物体看成子节点所代表物体 的包围盒,当两个父节点之间不存在遮挡关系时,就 没有必要对两者的子节点做进一步测试。
父节点之间的遮挡关系可以用它们之间的包围盒 进行预测试。
CHENLI
定义:一个形体的包围盒指的是包围它的简单形体。
比如,…
该技术常用于: 避免盲目的求交测试;
各种物体间的比较等。
一个好的包围盒要具有两个条件:
包围和充分紧密包围着形体; 对其的测试比较简单。 例:使用矩形包围合及长方体包围合来提高算法效 率…
CHENLI
9
提高消隐算法效率的常见方法 5
背面剔除
外法向 外法向与投影方向(观察方向)的夹角 前向面与后向面(背面)
剔除依据: 物体表面是封闭的,背面总是 被前向面所遮挡,从而始终是不可见的。
CHENLI
10
提高消隐算法效率的常见方法
6
空间分割技术
依据:场景中的物体,它们的投影在投影平面上 是否有重叠部分?(是否存在相互遮挡的可能?)对 于根本不存在相互遮挡关系的物体,应避免这种不必 要的测试。
方法:将投影平面上的窗口分成若干小区域;为 每个小区域建立相关物体表,表中物体的投影于该区 域有相交部分;则在小区域中判断那个物体可见时, 只要对该区域的相关物体表中的物体进行比较即可。
step 3.1: 对有的Q,有nmax(P)< nmin (Q), 则多边形的确距观察点最远,
它不可能遮挡别的多边形。令L = L – {P}, 返回step 2;
step 3.2: 存在某一个多边形Q,使nmax(P) > nmin (Q),需进一步判别:
step 3.2.1 若P,Q投影P’,Q’的包围盒不相交,则P,Q在表中的次序不重要, 令L = L – {P}, 返回step 2;否则进行下一步。
相关文档
最新文档