第 9 章 可见面判别算法

28
第9第 第第第第第第第

Upload: tucker-lee

Post on 03-Jan-2016

142 views

Category:

Documents


0 download

DESCRIPTION

第 9 章 可见面判别算法. 可见面判别算法. 遮挡关系 物体自身 景物之间 消隐算法分类 物空间 物体的各个面,判别可见性 象空间 投影平面上各象素比较 效率. 后向判别算法(凸多面体). 内外测试法 平面方程: F(x,y,z)=Ax+By+Cz+D, 点 (x,y,z) 使 Ax+By+Cz+D

TRANSCRIPT

Page 1: 第 9 章 可见面判别算法

第 9 章可见面判别算法

Page 2: 第 9 章 可见面判别算法

可见面判别算法• 遮挡关系 物体自身 景物之间• 消隐算法分类物空间 物体的各个面,判别可见性象空间 投影平面上各象素比较 效率

Page 3: 第 9 章 可见面判别算法

后向判别算法(凸多面体)

• 内外测试法• 平面方程: F(x,y,z)=Ax+By+Cz+D,

点 (x,y,z) 使 Ax+By+Cz+D<0( 顶点顺序右手螺旋) 则 该点在多边形面的后面。“内侧”

• 对凹多面体不适用

Page 4: 第 9 章 可见面判别算法

A

B

C

D

E

G

F

H

• 后向面判别法的局限性(凹多面体)

Page 5: 第 9 章 可见面判别算法

深度缓冲器算法 Z-buffer method深度缓冲器 存储当前显示点深度值刷新缓冲器 存储当前显示点光强① 初始化所有单元使 depthBuffer(x,y)= 最大值 ( 最远深度 ) frameBuffer(x,y)=I 背景

② 对每一多边形计算每一点的深度与光强如 z<depthBuffer (x,y) 则depthBuffer (x,y)=z,

frameBuffer(x,y)=I(x,y)

所有多边形处理完毕,按 frameBuffer(x,y) 中的 I(x,y) 着色。

算法结束。

· 各多边形以任意次序处理

· 同一多边形可用扫描线法• 缺点:较大的内存需求。• 改进:扫描线算法

Page 6: 第 9 章 可见面判别算法

A 缓冲区算法Accumulation-Buffer

• Z-buffer 算法无法处理表面光强的累计问题(透明)

对多边形每一个像素信息:• 深度域• 强度域 • 透明度 • 其他参数 链表结构

Page 7: 第 9 章 可见面判别算法

• 强度域数据

• A-buffer 算法 对多边形 按 y 排序, 对每根扫描线上 x, 按 z 排序, 对每个象素 由前到后,若多边形不透明,着此处象素光强值; 若多边形透明,计算下一个多边形累计光强值,直到

背景色 反走样技术

Page 8: 第 9 章 可见面判别算法

扫描线算法 scan-line method原理:一条扫描线对应的各面片间使用深度缓冲器算法• 数据准备:一行的深度缓冲器• 边表--多边形号, Ymax,Xc,1/m, 交点 X 值,多边

形指针• 多边形表--表面方程 A,B,C,D, 表面光强度,边表指

针 ,标识,标志位( on,off)

Page 9: 第 9 章 可见面判别算法

• 从最低扫描线开始,建立活化边表

按 x 升序排序处理• 从最左的边, X 交点处, S1 - on, 当遇到另一条边时,

S1 - off, 到达下一条边时, S2 - on, 离开时 off;

• 如果某象素只有一个多边形 on, 则强度值计入;• 如果某象素加入一个多边形,累计其光强度值,前面任

一个多边形 off, 不再计算它的作用(光强)• 删除多边形中到达另一端的边,更新活化边表 (参考多边形填充算法)

多边形号 Ymax Xc 1/m ······

Page 10: 第 9 章 可见面判别算法

循环遮挡问题•

Page 11: 第 9 章 可见面判别算法

深度排序算法 ( 画家算法 )depth-sorting method

• 按表面深度 zmin 排序; ( 每个面计算: zmin 、zmax)• 由深度最大的表面开始,与每个表面进行比较,若深度无重叠,

进行扫描转换。 (Z 方向无重叠图 13.12)• 对深度有重叠的表面进行以下测试,若其中一项成立,无需进行重新比较: ( 顺序进行)

Page 12: 第 9 章 可见面判别算法

1. 分别检查 x,y 方向的重叠,只要 某方向无重叠,两表面无遮挡; 图 13.13 , z 方向重叠, x 方向不重叠2. 图 13.14 内外测试法,成功3. 图 13.15 , 2 不成功 ,3成功4. 图 13.16

Page 13: 第 9 章 可见面判别算法

• 1-4都不成立 ,调换 S,S’,图 13.17

• 仍不成功• 调换 S,S”

• 若 S’,S” 有遮挡 ,调换 S’,S”

» 解决循环遮挡问题

Page 14: 第 9 章 可见面判别算法

BSP树算法 Binary Space-patitioning• 以多边形作为分割面 , 将场景划分为两个子空间 ( 以视点和分割

平面的内外侧判定)• 遇多边形将其分为两部分,归入相应的子空间,建立 BSP树• 继续分割 , 直到每个子空间只有一个多边形• 遍历 BSP树(右序),以画家算法对各表面着色

Page 15: 第 9 章 可见面判别算法

区域细分算法 Warnock 算法area-subdivision method

• 原理 将观察平面区域细分,直至此区域:只有一个表面、或不含表面、只有一个像素( 10次)。

• 多边形表面与区域相互关系– ①包围面片– ②重迭面片– ③内含面片– ④分离面片

② 重叠面片 ③ 内含面片 ④ 分离面片①包围面片

Page 16: 第 9 章 可见面判别算法

• 以下条件之一成立 , 无须进行分割1. 所有多边形均为它的分离面片④2. 在区域内只有一个①包围面片②重迭面片③内含面片3. 有几个多边形属前三种但最前一个是第①种– 其它 再分割后判断

• 分割的终止– 出现前三种情况之一– 子区域仅一象素 按中心取最前多边形

• 测试 1 用包围盒方法 ( 分离 ④ )• 测试 2 用包围盒方法判断内含表面③ 若包围盒与区域边界有交点 , 还需判断是否为① ② ④ 若是 , 光强计入 Buffer• 测试 3. 按 Z 排序 ,确定遮挡关系 ( 如图 )• 建立四叉树

·

测试 3 测试4 个角点的深度

Page 17: 第 9 章 可见面判别算法

八叉树算法• 由前往后将八叉树结点映射到观察面• 按 0, 1 , 2 … 5,6,7顺序处理八叉树节点;

01

23

45

7

观察方向0----0,41----1,52----2,63----3,7

• 透明时

下页

6

Page 18: 第 9 章 可见面判别算法

观察平面四分面• 深度优先遍历 : 对于某层结点按 ,0,1,2,3,……

检查对应结点未着色 , 着色• 四叉可见区域映射算法

0 1

2 3

Page 19: 第 9 章 可见面判别算法

光线投射算法ray casting

• 考查由视点出发穿过观察平面上一象素进入场景的射线到达最近物体为止

• 深度缓冲器算法的一种变形• 光线跟踪算法的特例

象素

Page 20: 第 9 章 可见面判别算法

曲面的消隐• 用光线投射算法 ,八叉树算法• 曲面的多边形网格逼进• 曲面表示 隐式 f(x,y,z)=0 参数方程 Bézier曲面 B- 样条曲面等• 曲面的层位面显示 : x,z 平面上的高度函数 y=f(x,z)1. 对于 Z 的取值范围 ,设定△ z,Zmin<=Zi<=Zmax i=0.1,…n

, 从 Z 的最大值开始生成 n+1 条曲线2. 对 Zi, ,对 x 的取值范围 Xmin<=X<=Xmax , 计算 y=f(x, Zi),生成一组曲线

3. 判定可见性 :• 首先建一张表,保存 x 像素的 ymin 与 ymax坐标,初值为 y 最大

值与最小值• 若 ymin≤y≤ymax,则该点不可见,否则,可见。重置 ymin,ymax

Page 21: 第 9 章 可见面判别算法
Page 22: 第 9 章 可见面判别算法

Y

X

Z

Page 23: 第 9 章 可见面判别算法

曲面的消隐的实现

• 消隐设显示器水平方向( X) 有M个象素,竖直方向有 N个象素

建立 YMIN[1..m], YMAX[1..m]

初值 YMIN[I]=maxY, YMAX[I]=minY

由近及远,对每个 zi, Xmin<=X<=Xmax 求 Y=f(x,zi) ( 顺序 )

• 如 y<YMIN[x] 则 YMIN[x]=y 且显示该点

• 如 y>YMAX[x] 则 YMAX[x]=y 且显示该点

• 一条曲线完成,绘制另一条曲线,完成一组曲线

• 一组曲线完成,可绘出另一组与前一组正交的曲线。

对 x 的取值范围,设定△ x,Xmin<=Xi<=Xmax i=0.1,…n,

生成另一组正交的曲线

Page 24: 第 9 章 可见面判别算法

• 曲面扫描线算法• 层位线算法

• 层位线算法• xy 平面网格上一组离散的 z 值,可以用层位线算法得到层位

线路径。• 每条层位线投影到观察平面显示。

Page 25: 第 9 章 可见面判别算法
Page 26: 第 9 章 可见面判别算法

线框可见性算法• 对线框模型 ,仅对边界与表面进行可见性测试• 显示方法 :⑴不可见⑵用不同线型不同颜色 如 :虚线、浅颜色算法 :⑴完全消隐 线段投影与平面投影交点间的线段 , 若深度都大于表面交点的深度 , 此线段不可见

⑵交点处 一个交点处有较大的深度 , 另一端有较小的深度 , 此时直线与平面必相交 , 计算交点 ,将直线分成两段 ,继续测试

某些算法适合线消隐• 后向面判别算法• 深度排序算法• 区域细分算法

Page 27: 第 9 章 可见面判别算法

• 可见性判别函数 后向面判别算法 Z-buffer 算法

Page 28: 第 9 章 可见面判别算法

End of Chapter 9