第八讲消隐与光照模型

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Zi, j = —
j
axi + byi + d c
若 c = 0,则多边形Fk的法线方向与 Z 轴垂直, Fk在投影 面上的投影为一条直线,可不予考虑。
7.2.2 区间扫描线算法
• 在多边形填充算法中,活性边表的使用取得了节省运
行空间的效果。用同样的思想改造Z-buffer算法:将 整个绘图区域分割成若干个小区域,然后一个区域一 个区域地显示,这样Z缓冲器的单元数只要等于一个区 域内像素的个数就可以了。如果将小区域取成屏幕上 的扫描线,就得到扫描线Z缓冲器算法。

将z缓冲器中个单元的初始值置为-1(规范视见体的最小n 值)。当要改变某个像素的颜色值时,首先检查当前多边形 的深度值是否大于该像素原来的深度值(保存在该像素所对 应的Z缓冲器的单元中),如果大于,说明当前多边形更靠近 观察点,用它的颜色替换像素原来的颜色;否则说明在当前 像素处,当前多边形被前面所绘制的多边形遮挡了,是不可 见的,像素的颜色值不改变。
凸多面体是由若干个平面围成的物体。假设这些平面方程为 aix+biy+ciz+di=0, i=1, 2, …, n (7.1)
变换方程的系数,使(ai, bi, ci)指向物体外部的。那么: 假设式(8.1)所定义的凸多面体在以视点为顶点的视图四棱 锥内,视点与第i个面上一点连线的方向为(li, mi, ni)。那么自隐 藏面的判断方法是: (ai, bi, ci)⋅(li, mi, ni)>0 任意两个自隐藏面的交线,为自隐藏线。(自隐藏线应该用虚 线输出)。
7.1.1 消隐的分类
• 线消隐 (Hidden-line)——对象空间算法 对象:线框模型
•面消隐 (Hidden-surface)——图像空间算法 面消隐
对象:填色图
线框模型
填色图
•线消隐 是以场景中的物体为处理单元,将一个 线消隐
物体与其余的 k-1 个物体逐一比较,仅显示它可 见的表面以达到消隐的目的。 此类算法通常用于消除隐藏线 消除隐藏线。 消除隐藏线
Z—Buffer算法) Buffer算法 深度缓存算法 ( Z Buffer算法)
Z—Buffer Buffer ---用于存放与屏幕上像素点对应的物体上点的深度值。 用于存放与屏幕上像素点对应的物体上点的深度值。
投影面
y
z
视线方向
视点位置
xLeabharlann Baidu
屏幕像素
F — Buffer
Z—Buffer
Z-buffer算法的步骤如下: 算法的步骤如下: 算法的步骤如下

消隐算法分类
根据实现时所在的坐标系或空间: 根据实现时所在的坐标系或空间: 图像空间算法,在屏幕坐标系中实现, 1、图像空间算法,在屏幕坐标系中实现,(一旦达到屏幕 分辨率,就不再计算下去) 分辨率,就不再计算下去) 计算量=屏幕像素点N*物体个数n 计算量=屏幕像素点N*物体个数n N*物体个数 2 、 物体空间算法(也称对象空间算法): 把 n 个对像素中的 物体空间算法( 也称对象空间算法) 每一个与其它( 每一个与其它(n-1)个对象比较,消去不可见的对象: 个对象比较,消去不可见的对象: 计算量=n(n计算量=n(n-1) =n(n
之后,将对象表面上不可见的点、线、面消去。执行这种功能 的算法,称为消隐算法。
例如: 例如:
基本概念
一.为什么要消隐 为什么要消隐 因为计算机图形处理的过程中,不会自动消去隐藏部分, 相反会将所有的线和面都显示出来。 问题:① 对于线画图形会出现多义性。 ② 要增强图形的真实感必须进行消隐处理。
对于光栅扫描着色的面图形则会导致图形错误。
画家算法步骤
Step 1: 将场景中所有多边形存入一个线性表(链表或数组), 记为L; Step 2: 如果L中仅有一个多边形,算法结束;否则根据每个多边 形的nmin对它们预排序。不妨假定多边形P落在表首,即 nmin(P)为最小。再记Q为L – {P}(表中其余多边形)中任 意一个; Step 3: 判别P, Q之间的关系,有如下二种:
2)然后按照从表头到表尾的顺序逐个绘制 物体。
画家算法
关键:如何对场景中的物体按深度(远 近)排序,建立深度优先级表? 一种针对多边形的排序算法如下:
假定在规范化投影坐标系uvn中,投影方向是n 轴的负向,因而n坐标大距观察者近。记nmin(P) nmax(P)分别为多边形P的各个顶点n坐标的最小 值和最大值,算法步骤如下:
⑴ 初始化ZB和CB,使得ZB(i, j)=Zmax,CB(i, j)=背景色。其中, i=1, 2, …, m,j=1, 2, …, n。 ⑵ 对多边形α,计算它在点(i, j)处的深度值zi, j。 ⑶ 若zij<ZB(i, j),则ZB(i, j)=zij,CB(i, j)=多边形α的颜色。 ⑷ 对每个多边形重复⑵、⑶两步。最后,在CB中存放的就是 消隐后的图形。
第七讲 消隐
线消隐与面消隐 面消隐的几种常用算法
深度缓存(Z-buffer)算法 算法 深度缓存 区间扫描线算法 深度排序算法(画家算法) 深度排序算法(画家算法)
一.为什么要消隐
因为计算机图形处理的过程中,不会自动消去隐藏部分, 相反会将所有的线和面都显示出来。
所以:如果想有真实感地显示三维物体,必须在视点确定
可见子线段的确定
•面消隐是以窗口内的每个像素为处理单元, 面消隐
确定 在每一个像素处,场景中的物体哪一个距离观察点最 最 可见的) 从而用它的颜色来显示该像素。此类 近(可见的),从而用它的颜色来显示该像素 消除隐藏面。 算法通常用于消除隐藏面 消除隐藏面
•若显示区域中有 m×n 个像素,则其计算复杂度为 O(mnkh)。 •假定场景中有 k 个物体,平均每个物体的表面由 h 个多边形构成,其计算复杂度为 O((kh)2)。
画家算法
在多边形面片数量很大时(而且没有循环 遮挡或贯穿的情况下),画家消隐算法最快。 本算法不能处理的情况: 多边形循环遮挡 多边形相互穿透 解决办法:分割成两个
在各种消隐算法中,下列那些论述是 正确的? (A,B,C,D )
A. 画家算法的基本思想是先将屏幕赋值为背景色, 然后在把物体各个面按其到视点距离远近排序; B. Z缓冲算法不仅需要帧缓冲区存放象素的亮度值, 还需要一个Z缓冲区存放每个象素的深度值; C. 扫描线算法首先按扫描行顺序处理一帧画面,在 由视点和扫描线所决定的扫描平面上解决消隐问题; D. 区域采样算法是利用图形的区域连贯性在连续的 区域上确定可见面及其颜色和亮度。
1) 线段与多边形的任何边均不相交。处理方法比 较简单。 2) 线段与多边形相交。那么多边形的边把线段投 影的参数区间[0, 1]分割成若干子区间,每个 子区间对应一条子线段(如下图所示),进一步 判断各子线段的隐藏性 。
线段投影被分为若干子线段
• 把各个子线段与 所有需要比较的多 边形依次进行隐藏 性判别,记下各条 隐藏子线段的位置。 最后,对这些区间 进行求并集运算, 即可确定总的隐藏 子线段的位置,余 下的则是可见子线 段 (右图)
算法描述如下: 算法描述如下:
for (窗口内的每一个像素) {确定距观察点最近的物体,以该物体表面的颜色来显示像素;
}
面消隐示例
7.2.1 深度缓存 深度缓存(Z-buffer)算法 算法
•由来 由来: 由来 帧缓冲器 – 保存各像素颜色值(CB) z缓冲器 --保存各像素处物体深度值(ZB) z缓冲器中的单元与帧缓冲器中的单元一一对应 •思路 思路: 思路
Z-Buffer算法实现中的关键问题 Buffer算法实现中的关键问题 ①判断点( i, j )是否在多边形Fk在投影面上的投影内 解决办法:采用包含测试。 ②计算多边形Fk在点( i, j )处的深度值 Zi, 若多边形Fk的平面方程为: ax + by + cz + d = 0 若 c ≠ 0,则
7.2.3 深度排序算法(画家算法) 深度排序算法(画家算法) 由来:画家的作画顺序暗示出所画物体之间
的相互遮挡关系
算法基本思路:
1)先将场景中的物体按其距观察点的远近 进行排序,结果放在一张线性表中;
(线性表构造: 线性表构造: 距观察点远的称优先级低,放在表头; 距观察点远的称优先级低,放在表头;距观察点 近的 称优先级高,放在表尾。该表称为深度优先级表 深度优先级表) 称优先级高,放在表尾。该表称为深度优先级表)
•假定场景中有 k 个物体,平均每个物体的表面由 h 个多边形构成,其计算复杂度为 O((kh)2)。
算法描述如下: 算法描述如下:
for (场景中的每一个物体) { 将该物体与场景中的其它物体进行比较,确定其表面的 可见部分; 显示该物体表面的可见部分; } (示例如右图)
线消隐示例
7.1.2 凸多面体的隐藏线消隐
扫描线算法描述
for ( 各条扫描线 各条扫描线) {将帧缓冲器 将帧缓冲器I(x)置为背景色; 置为背景色; 将帧缓冲器 置为背景色 缓冲器的Z(x)置为最大值; 置为最大值; 将Z缓冲器的 缓冲器的 置为最大值 for (每个多边形) 每个多边形) 每个多边形 { 求出多边形在投影平面上的投影与当前扫描线的相交区间 for (该区间内的每个像素) 该区间内的每个像素) if ( 多边形在此处的 值小于 多边形在此处的Z值小于 值小于Z(x) ) { 置帧缓冲器 置帧缓冲器I(x)值为当前多边形颜色; 值为当前多边形颜色; 值为当前多边形颜色 缓冲器Z(x)值为多边形在此处的 值; } 值为多边形在此处的Z值 置Z缓冲器 缓冲器 值为多边形在此处的 } }
• 这个算法的关键在第⑵步,要尽快判断出哪些点落在一 个多边形内 ,并尽快求出一个点的深度值 。(下页)
优点: 算法简单,易于硬件实现。 • 缺点: 缺点:
(1):ZB和CB两个缓存数组占用的存储单元太多 ,需要有一 个较大容量的 Z—Buffer 。 (2):在每个多边形占据的每个像素处都要计算深度值,计算 量大; (3):在实现反走样、透明和半透明等效果方面困难(可以用 A-缓存器算法解决)。
8.1.3 凹多面体的隐藏线消隐
• 凹多面体的隐藏线消除比较复杂。 • 假设凹多面体用它的表面多边形的集合表示 , 消除隐藏线的问题可归结为: 对于一条空间线段P 对于一条空间线段 1P2和一个多边形α,判 如果被遮挡, 断线段是否被多边形遮挡 。如果被遮挡,求出 隐藏部分
线段和多边形的关系有:
画家算法步骤
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;否则进行下一步。 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;否则在它们所相交的区 域中任取一点,计算P,Q在该点的深度值,如果P的深度小,则 P,Q关系正确,令L = L – {P}, 返回step 2;否则交换P,Q,返回step 3.
基本概念
一.消隐涉及的算法: 消隐涉及的算法: 消隐涉及的算法 排序 连贯性——是指所考察的物体或画面的性质在局部区域 指所考察的物体或画面的性质在局部区域 内保持不变的一种倾向。例如: 内保持不变的一种倾向 棱边的连贯性是指:棱边的可见性在它与其他棱边相交 棱边的可见性在它与其他棱边相交 时才发生变换; 时才发生变换 面的连贯性是指:如果面的一部分是可见的,则一般情 如果面的一部分是可见的, 如果面的一部分是可见的 况下整个面都是可见的。 况下整个面都是可见的 二
相关文档
最新文档