计算机图形学第十三章隐藏面的消除
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
} } }
深度缓冲算法
该算法的最大优点在于简单。它可轻而易举地处理隐藏面 以及显示复杂曲面之间的交线。画面可以任意复杂。由于画面 元素可按任意次序写入帧缓冲器和Z缓冲器,故无需按深度优 先级排序,可省去深度排序时间。
扫描线算法
如果只对一条扫描线进行Z缓冲器算法,则可以得到扫描线 Z缓冲器算法 。
Lecture 13
隐藏面的消除
概述
在生成具有真实感的景物时,要考虑的一个重要问题 是如何由选定的视向把画面的不可见部分消去,即隐藏 线及隐藏面的消除问题。目前,存在解决此问题的若干 方法,并建立了若干有效的消隐算法。
消隐算法及其分类
人不能一眼看到一个三维物体的全部表面。从一个视 点去观察一个三维物体时,必然只能看到该物体表面上 的部分点、线、面,而其余部分则被这些可见部分遮挡 住。如果观察的是若干个三维物体,则物体之间还可能 彼此遮挡而部分不可见。
扫描线Z缓冲器算法做了两点改进。 ①将整个绘图窗口内的消隐问题分解到一条条扫描线上解决, 使所需的Z缓冲器大大减少。 ②计算深度值时,利用了面连贯性,只用了一个加法。
区间扫描线算法
扫描线Z缓冲器中,被多个多边形覆盖的像素区处还 要进行多次计算,计算量仍然很大。
区间扫描线算法克服了这一缺陷,可利用连贯性提 高算法效率,使得在一条扫描线上每个区间只计算一次 深度值,并且不需要Z缓冲器。
深度缓冲算法
Z缓冲器的深度值越大,说明该点越接近视点。
在把显示对象的每个面上每一点的属性(颜色或灰 度)值填入帧缓冲器相应单元前,要把这点的z坐标值和 Z缓冲器中相应单元的值进行比较。只有前者大于后者时 才改变帧缓冲器的那一单元的值,同时Z缓冲器中相应单 元的值也要改成这点的z坐标值。
深度缓冲算法描述
它是把当前扫描线与各多边形在投影平面的投影的交 点进行排序后,使扫描线分为若干子区间。
区间扫描线算法
可以将区间分为三类:
①区间为空 ,区间 [0, a1],此时只要按背景属性显示即 可;
②区间中只包含一个区段即一条交线或交线的一部分 .如 图中的区间[a1, a2]和[a3, a4],此时按该区段所在多边 形的显示属性进行显示;
•图像空间是对象投影后所在的二维空间,即设备坐标系
图像空间方法是将对象投影后分解为像素,按照一 定的规律,比较像素之间的深度(z)值,从而确定其是 否可见的方法。
消隐算法及其分类
虽然各种消隐方法具体的实现方法不同,但这些方法中大 都采用分类及连贯两种基本方法改进算法效率。
•分类方法主要用于深度比较,即按照景物中各个线、面、体 与取景平面的距离分类,以决定取舍。
{ 求覆盖该区间的所有多边形,将它们记入活性多边形表APL中; 在区间上任取一点,计算APL中各多边形在该点的深度值, 记值最大者为P; 用多边形P的颜色填充该区间;
}
}
BSP树算法
二叉空间剖分(BSP,Binary Space-Partitioning)树 算法是一种判别物体可见性的有效算法。它类似于画家 算法,将面片由后往前地在屏幕上绘出 。
消隐算法及其分类
按照操作对象的不同表达,消隐算法可以分为两大类 •对象空间方法(Object Space Methods) •图像空间方法(Image Space Methods)
对象空间方法和图像空间方法
•对象空间是对象三维空间,即对象被定义时所处的坐标 空间。
对象空间方法是对要显示的各个对象及对象的各个 部分进行相互比较,分析对象的三维特性之间的关系, 以确定不可见的表面或者线条的方法。
画家算法的原理:
先把屏幕置成背景色,再把物体的各个面按其离视点的远近进 行排序,离视点远者在表头,离视点近者在表尾,排序结果存在 一张深度优先级表中。
然后按照从表头到表尾的顺序逐个绘制各个面。由于后显示的 图形取代先显示的画面,而后显示的图形所代表的面离视点更近 ,所以由远及近的绘制各面,就相当于消除隐藏面。
Z-Buffer算法()
{
帧缓存全置为背景色 深度缓存全置为最小z值 for (每一个多边形) {扫描转换该多边形 for (该多边形所覆盖的每个像素(x,y) )
{
计算该多边形在该像素的深度值d(x,y); if (d(x,y)大于Z缓存在(x,y)的值)
{
把d(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处
•连贯方法是指利用显示景物具有某些相关特性,可以用来简 化计算。
消隐算法及其分类
从消隐对象角度来看,消隐算法可分为两类:线消 隐和面消隐。
•线消隐的消隐对象是物体上的边,消除的是物体上不 可见的边。
•面消隐的消隐对象是物体上的面,消除的是物体上不 可见的面。
来自百度文库
画家算法
画家算法是把对象空间方法与图像空间方法结合在一起来消除 隐藏面的方法。
多边形的画家算法
Q P a. zmin
zmax
多边形的画家算法
Q <P b. zmin
zmax
多边形的画家算法
c.所有测试失败:
必须对两个多边形在Oxy平面上的投影作求交运算。 计算时不必具体求出重叠部分,在交点处进行深度比较 ,只要能判断出前后顺序即可。
深度缓冲算法
Z缓冲区(Z-Buffer)算法。在这个算法里,不仅需要有 帧缓存来存放每个像素的颜色值,还需要一个深度缓存 来存放每个像素的深度值。
该算法习惯上称为画家算法或深度排序算法。
多边形的画家算法
(1)以每一多边形的zmin作为排序关键码,建立初步的 深度排序表,表中第一个多边形是具有最小z值的多边形 ,记为P。设视点位于z轴方向的无穷远处,则P为离视点 最远的多边形,表中第二个多边形标为Q。
(2)检查表中每个多边形与P的关系。分为3种关系:
③区间中有多条分别属于不同多边形的区段,如图中的区 间[a2, a3],此时必须计算该区间中每个区段的深度,具 有最大z值的区段为该区间中的可见段,按此可见段所在 多边形的属性进行显示
区间扫描线算法
• 区间
算法描述
for (绘图窗口内的每一条扫描线) { 求投影与当前扫描线相交的所有多边形; 求上述多边形中投影与当前扫描线相交的所有边,将它们记录在活化边表AEL中; 求AEL中每条边的投影与扫描线的交点; 按交点的u坐标将AEL中各边从左到右排序两两配对组成一个区间; for (AEL中每个区间)
深度缓冲算法
该算法的最大优点在于简单。它可轻而易举地处理隐藏面 以及显示复杂曲面之间的交线。画面可以任意复杂。由于画面 元素可按任意次序写入帧缓冲器和Z缓冲器,故无需按深度优 先级排序,可省去深度排序时间。
扫描线算法
如果只对一条扫描线进行Z缓冲器算法,则可以得到扫描线 Z缓冲器算法 。
Lecture 13
隐藏面的消除
概述
在生成具有真实感的景物时,要考虑的一个重要问题 是如何由选定的视向把画面的不可见部分消去,即隐藏 线及隐藏面的消除问题。目前,存在解决此问题的若干 方法,并建立了若干有效的消隐算法。
消隐算法及其分类
人不能一眼看到一个三维物体的全部表面。从一个视 点去观察一个三维物体时,必然只能看到该物体表面上 的部分点、线、面,而其余部分则被这些可见部分遮挡 住。如果观察的是若干个三维物体,则物体之间还可能 彼此遮挡而部分不可见。
扫描线Z缓冲器算法做了两点改进。 ①将整个绘图窗口内的消隐问题分解到一条条扫描线上解决, 使所需的Z缓冲器大大减少。 ②计算深度值时,利用了面连贯性,只用了一个加法。
区间扫描线算法
扫描线Z缓冲器中,被多个多边形覆盖的像素区处还 要进行多次计算,计算量仍然很大。
区间扫描线算法克服了这一缺陷,可利用连贯性提 高算法效率,使得在一条扫描线上每个区间只计算一次 深度值,并且不需要Z缓冲器。
深度缓冲算法
Z缓冲器的深度值越大,说明该点越接近视点。
在把显示对象的每个面上每一点的属性(颜色或灰 度)值填入帧缓冲器相应单元前,要把这点的z坐标值和 Z缓冲器中相应单元的值进行比较。只有前者大于后者时 才改变帧缓冲器的那一单元的值,同时Z缓冲器中相应单 元的值也要改成这点的z坐标值。
深度缓冲算法描述
它是把当前扫描线与各多边形在投影平面的投影的交 点进行排序后,使扫描线分为若干子区间。
区间扫描线算法
可以将区间分为三类:
①区间为空 ,区间 [0, a1],此时只要按背景属性显示即 可;
②区间中只包含一个区段即一条交线或交线的一部分 .如 图中的区间[a1, a2]和[a3, a4],此时按该区段所在多边 形的显示属性进行显示;
•图像空间是对象投影后所在的二维空间,即设备坐标系
图像空间方法是将对象投影后分解为像素,按照一 定的规律,比较像素之间的深度(z)值,从而确定其是 否可见的方法。
消隐算法及其分类
虽然各种消隐方法具体的实现方法不同,但这些方法中大 都采用分类及连贯两种基本方法改进算法效率。
•分类方法主要用于深度比较,即按照景物中各个线、面、体 与取景平面的距离分类,以决定取舍。
{ 求覆盖该区间的所有多边形,将它们记入活性多边形表APL中; 在区间上任取一点,计算APL中各多边形在该点的深度值, 记值最大者为P; 用多边形P的颜色填充该区间;
}
}
BSP树算法
二叉空间剖分(BSP,Binary Space-Partitioning)树 算法是一种判别物体可见性的有效算法。它类似于画家 算法,将面片由后往前地在屏幕上绘出 。
消隐算法及其分类
按照操作对象的不同表达,消隐算法可以分为两大类 •对象空间方法(Object Space Methods) •图像空间方法(Image Space Methods)
对象空间方法和图像空间方法
•对象空间是对象三维空间,即对象被定义时所处的坐标 空间。
对象空间方法是对要显示的各个对象及对象的各个 部分进行相互比较,分析对象的三维特性之间的关系, 以确定不可见的表面或者线条的方法。
画家算法的原理:
先把屏幕置成背景色,再把物体的各个面按其离视点的远近进 行排序,离视点远者在表头,离视点近者在表尾,排序结果存在 一张深度优先级表中。
然后按照从表头到表尾的顺序逐个绘制各个面。由于后显示的 图形取代先显示的画面,而后显示的图形所代表的面离视点更近 ,所以由远及近的绘制各面,就相当于消除隐藏面。
Z-Buffer算法()
{
帧缓存全置为背景色 深度缓存全置为最小z值 for (每一个多边形) {扫描转换该多边形 for (该多边形所覆盖的每个像素(x,y) )
{
计算该多边形在该像素的深度值d(x,y); if (d(x,y)大于Z缓存在(x,y)的值)
{
把d(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓存的(x,y)处
•连贯方法是指利用显示景物具有某些相关特性,可以用来简 化计算。
消隐算法及其分类
从消隐对象角度来看,消隐算法可分为两类:线消 隐和面消隐。
•线消隐的消隐对象是物体上的边,消除的是物体上不 可见的边。
•面消隐的消隐对象是物体上的面,消除的是物体上不 可见的面。
来自百度文库
画家算法
画家算法是把对象空间方法与图像空间方法结合在一起来消除 隐藏面的方法。
多边形的画家算法
Q P a. zmin
zmax
多边形的画家算法
Q <P b. zmin
zmax
多边形的画家算法
c.所有测试失败:
必须对两个多边形在Oxy平面上的投影作求交运算。 计算时不必具体求出重叠部分,在交点处进行深度比较 ,只要能判断出前后顺序即可。
深度缓冲算法
Z缓冲区(Z-Buffer)算法。在这个算法里,不仅需要有 帧缓存来存放每个像素的颜色值,还需要一个深度缓存 来存放每个像素的深度值。
该算法习惯上称为画家算法或深度排序算法。
多边形的画家算法
(1)以每一多边形的zmin作为排序关键码,建立初步的 深度排序表,表中第一个多边形是具有最小z值的多边形 ,记为P。设视点位于z轴方向的无穷远处,则P为离视点 最远的多边形,表中第二个多边形标为Q。
(2)检查表中每个多边形与P的关系。分为3种关系:
③区间中有多条分别属于不同多边形的区段,如图中的区 间[a2, a3],此时必须计算该区间中每个区段的深度,具 有最大z值的区段为该区间中的可见段,按此可见段所在 多边形的属性进行显示
区间扫描线算法
• 区间
算法描述
for (绘图窗口内的每一条扫描线) { 求投影与当前扫描线相交的所有多边形; 求上述多边形中投影与当前扫描线相交的所有边,将它们记录在活化边表AEL中; 求AEL中每条边的投影与扫描线的交点; 按交点的u坐标将AEL中各边从左到右排序两两配对组成一个区间; for (AEL中每个区间)