第八章 隐藏线和隐藏面的消除

Post on 18-Jan-2016

96 Views

Category:

Documents

9 Downloads

Preview:

Click to see full reader

DESCRIPTION

第八章 隐藏线和隐藏面的消除. 可见面判断的有效技术. 多面体隐藏线消除算法. 基于窗口的子分算法. 隐藏线和隐藏面的消除. 基于多边形的子分算法. z 缓冲器算法和扫描线算法. 优先级排序表算法. 光线投射算法. 曲面隐藏线的消除. 消隐的效果图. 隐藏线或 隐藏面消除. 相对于投影方向 平行投影. 相对于投影中心 透视投影. 确定线或 面可见 性. 在和投影点到像素连线相交的表面中,找到离观察点最近的表面; 用该表面上交点处的颜色填充该像素;. 判定场景中的所有可见表面; 用可见表面的颜色填充相应的像素以构成图形;. 两种基本算法. - PowerPoint PPT Presentation

TRANSCRIPT

Computer Graphics

第八章 隐藏线和隐藏面的消除

Computer GraphicsComputer Graphics

隐藏线和隐藏面的消除

基于窗口的子分算法

zz 缓冲器算法和扫描线算法

光线投射算法

基于多边形的子分算法

优先级排序表算法

曲面隐藏线的消除

可见面判断的有效技术

多面体隐藏线消除算法

Computer GraphicsComputer Graphics

消隐的效果图

Computer GraphicsComputer Graphics

隐藏线或隐藏面消除 确定线或

面可见性

相对于投影中心透视投影

相对于投影方向平行投影

Computer GraphicsComputer Graphics

以构成图像的每一个像素为处理单元,对场景中的所有表面,确定相对于观察点是可见的表面,用该表面的颜色填充该像素

两种基本算法

以三维场景中的物体对象为处理单元,在所有对象之间进行比较,除去完全不可见的物体和物体上不可见的部分

在和投影点到像素连线相交的表面中,找到离观察点最近的表面;用该表面上交点处的颜色填充该像素;

判定场景中的所有可见表面;用可见表面的颜色填充相应的像素以构成图形;

Computer GraphicsComputer Graphics8.1 可见面判断的有效技术

场景有 N 个面,所有的面两两求交判定可见面, O(N2)场景有 N 个面,所有的面两两求交判定可见面, O(N2)

减少可见线和可见面判定计算量的常用的技术

非垂直投影转换成垂直投影 后向面消除边界盒

Computer GraphicsComputer Graphics8.1.1 边界盒

Computer GraphicsComputer Graphics8.1.1 边界盒

min 1 2 min 1 2

max 1 2 max 1 2

min( , ), min( , )

max( , ), max( , )

x x x y y y

x x x y y y

Q1Q2 边界盒

边的边界盒

Q5Q6 的边界盒

1max2min1max2min

2max1min2max1min

yyxx

yyxx

Computer GraphicsComputer Graphics8.1.2 后向面消除

后向面总是看不见的,而且别的棱也不会由于后向面的遮挡而成为不可见,因此,把后向面全部去掉并不影响消隐结果

IJFGH , FABG ,HCDI 和 IDEJ 前向面 其余为后相面

多边形表面

后向面表面的法向指向与观察者相背离

前向面外法线方向指向观察者

Computer GraphicsComputer Graphics8.1.2 后向面消除

顶点 ,顶点的坐标

LVVV ,,, 21

),,( iii zyx

多边形 F沿着顶点序列走时,其内部始终在他的右侧

1V

2V

3V

LV

若构成凸的多边形 是 F 内法线方向

12 ,111 Lkvvvv kka

大于零,外法线和 z轴正向的夹角大于 90度,后向面

z)(a

前向面0SP

后向面0SP

Computer GraphicsComputer Graphics8.2 多面体隐藏线消除算法

用线框方式来表示多面体,在这种表示方式下,多面体用棱边来表示

隐藏线便是不可见的棱边或棱边中不可见的部分

找到各棱边上可见和不可见部分的分界点

多面体的各棱边投影到oxy 平面上

在 oxy 平面上求棱边和棱边之间的交点

BC,BA,BG, EA为隐藏线单击看例子

Computer GraphicsComputer Graphics8.2.1 算法的基本思想

隐藏线消除实际计算过程 :

Step1Step1

确定可能遮挡体 A 的那些体集合 B ( 包括体 A 本身 ) 。

Step2Step2

A 的每个多边形G ,要从 B 中找出可能遮挡它的所有多边形的集合 C

Step3Step3

对多边形 G 的每一条边 L ,从集合 C 中找出可能遮挡它的所有多边形E

Step4Step4

求 L 和多边形 E中的边的交点,确定 L 的可见部分

Computer GraphicsComputer GraphicsStep4 的处理技术:

设边 L 的两端点是 vi 和 vj ,对边 L 和每一个可能遮挡它的多边形 E,都要做下列计算和判断以确定其隐藏关系。

(1) 边 L 的两端点都在 E 所在平面靠近观察者的一侧,则 E 不能遮挡直线

(2) vi 和 vj 中至少有一个不在 E 所在平面靠近观察者的一侧,且边 L 和 E 在 oxy 平面的投影相交,求出其交点。对每一个交点还要判断它在 L 上的对应点是在多边形 E 的前面还是后面,只保留在多边形后面的交点。

(3) L 和多边形 E 在 oxy 平面的投影之间没有交点,这时要判断点 vi 或 vj 在 oxy 平面上的投影是否在 E 的投影的内部,若是,则边 整个被 E 所遮挡

边 v1v2 和多边形 ABCD 在 Oxy平面上的投影虽然有交点 Q ,但它在 v1v2 上的对应点 v 却在多边形的前方,这种交点可不考虑

Computer GraphicsComputer Graphics8.2.2 确定边 L 和多边形 E 关系的技术

1. 确定 L 的顶点与遮挡多边形的前后位置关系

jv

记向量 ,则多边形 E 所在的平面方程为 (8.5)3 3 3( , ) [ ( ) ( )] /z x y z a x x b y y c

3 4 3 5( , , ) ( )a b c v v v v 3 4 5, , ,v v v任意取多边形 E 不在一条直线上的三个顶点,设为

设点 的坐标为 若 ,则 在多边形所在平面的前面,否则认为 在多边形所在平面的后面。

( , , )j j jx y z ( , )j j jz x y z jv

jv

( , )j jz x y

jv

iv

( , )j j jz x y zjz

Computer GraphicsComputer Graphics

上对应的交点在多边形所在平面的前面,否则在后面。

判断边 vivj 和多边形 E 在 oxy 平面的投影之间是否有交点,可通过求边vivj 和 E 的边界在 oxy 平面上投影是否相交实现

在 vivj 平面的投影线段的参数方程为 (8.6)   多边形上任一边 vkvk+1 在 oxy 平面上的投影为

(8.7)

联立 (8.6) 和 (8.7) ,解方程得

2. 确定 L 与遮挡多边形的交点和遮挡多边形的前后位置关系

(1 )

(1 )

i j

i j

x x s x s

y y s y s

1

1

(1 )

(1 )k k

k k

x x t x t

y y t y t

1 1[( )( ) ( )( )] /

[( )( ) ( )( )] /k i k k k i k k

i k j i j i i k

s y y x x x x y y R

t x x y y x x y y R

1 1( )( ) ( )( )k k j i k k j iR x x y y y y x x

0 , 1s t 边和线段 vivj 在 oxy 平面上的投影才有交点

1(1 ) (1 )i j k kz s z s z t z t

jivv (1 )i jz s z s

1(1 )k kz t z t

Computer GraphicsComputer Graphics

由式 (8.9) 可知 ,其中 表示向量 在 z 轴上的投影。

3. 确定交点和多边形的关系:是进点还是出点

1( )k k i j zR w w w w $$$$$$$$$$$$$$$$$$$$$$$$$$$$

( )zA A

1 1, ,k k i j k k i jw w w w $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

w w w w

QiQj 进入或走出多边形

当 时, 由多边形外进入多 边形内(该交点称为进点)

0R i jw w$$$$$$$$$$$$$$

当 时, 由多边形内离开多边形到多边形外(该交点称为出点)。

0R i jw w$$$$$$$$$$$$$$

满足右手系

Computer GraphicsComputer Graphics4. 确定 点和多边形的关系iw

判断 点在多边形内或外,可以从 点出发沿 x 轴的正向作一条射线 若该射线和多边形边界的交点个数是奇数,则 在多边形内 若该射线和多边形边界的交点个数是偶数,就在多边形外 由于舍入误差,可得到完全不同的结果

5w 7w

6w

8w

1w

2w3w

4w

iw

iw

iw

无交点

奇交点

单处理iw

偶交点

iwiw

iw

1 1( )( ) / ( )k k k k k ky y y x x x x y

iy y 1k kw w 把 代入 的方程

1 1( )( ) / ( )k k i k k k kx x x y y y y x 得

ixx Fwi若

1kk ww说明

有一个交点。

Computer GraphicsComputer Graphics8.2.3 确定 L 的可见部分

不可见阶 它是一个数字,代表了边上从该点到下一个交点的部分被几个多边

形遮挡 与所有多边形的交点进行由小到大的顺序排序ji ww

1,,,,,0 1210 nn sssss 不可见阶的确定

1确定边起始顶点处的不可见阶。将阶置为覆盖该点的多边形的个数。

2确定边 与遮挡多边形各交点处的不可见阶。交点为进点则 不可见阶加 1 ,交点为出点则 不可见阶减 1

ji ww

原则:若 处不可见阶为 0 ,则由参数 和 所对应的直线段是可见的,否则为不可见is is1is

Computer GraphicsComputer Graphics8.3 基于窗口的子分算法

Computer GraphicsComputer Graphics8.3 基于窗口的子分算法

多边形与窗口的关系:

Computer GraphicsComputer Graphics8.3 基于窗口的子分算法

所有多边形均和窗口分离,这时只要把窗口内所有的像素填上背景色

只有一个多边形和窗口相交,或这个多边形包含在窗口内。这时,先对窗口内每一像素填上背景颜色,再对窗

口内多边形部分用扫描线算法填色

只有一个包围窗口的多边形,则窗口用包围多边形的颜色填充。

多个多边形和窗口的关系分别是相交、内含或包围,但是有一个包围窗口的多边形在其他多边形前面,整个窗口用该包围多边形的颜色填

窗口分割的结束条件

不成立的窗口将再一分为四

Computer GraphicsComputer Graphics8.3 基于窗口的子分算法

提高效率的有效的处理技术

排序

对所有的多边形按其顶点的 z 坐标最大值来排序

细分

每次细分窗口后,用边界盒的办法判断多边形序列中的多边形是否和四个子窗口相交,不相交的多边形可从多边形序列中排除

若窗口被多边形 G 包含,被 G 遮挡的多边形要从窗口的多边形序列中去掉

E

A

窗口

zmax

zmin

B

C

D

G

H

F

图 8.12 确定被遮的挡多边形

izz maxmin CD 被 AB 遮挡

GH zz AB 遮挡了 EF

Computer GraphicsComputer Graphics8.4 基于多边形的子分算法

算法描述: 各多边形在深度方向作初步的排序

多边形序列中的第一个多边形( 裁剪多边形 )作为裁剪窗口

区域内多边形

确定内部表中多边形的前

后顺序

区域外多边形

外部表中同样的工作 裁剪过程要

重复到外部表中不再有多边形为止

Computer GraphicsComputer Graphics8.4 基于多边形的子分算法

z

x

y

4

3

2

1

2i 3i

4i 4o

a) ni 为窗口内的多边形表, n=2,3,4 ; b) no 为窗口外的多边形表 ,n=3,4图 8.14 消隐多边形的裁剪

3o

例子

Computer GraphicsComputer Graphics8.5 z 缓冲器算法和扫描线算法

u

v

n

umax

vmax

基本思想:

Computer GraphicsComputer Graphics

具体实现此算法需要 z 缓冲器数组和帧缓冲器数组,分别设为 Zdepth [ ][ ]与 Frame [ ][ ] :•对屏幕上每个点( x,y),令 Zdepth [x][y] 为 z 的极小值, Frame [x][y] 为背景颜色。•对所有多边形做如下工作:对多边形上 每一点( x,y ) ,计算其 z值。 若 z> Zdepth [x][y] ,则 Zdepth [x][y] = z , 并将此点属性值赋给 Frame[x][y] ,否则 说明此点离观察者较远,两个数组的值 都不用改变

8.5 z 缓冲器算法和扫描线算法

x,y( )

Computer GraphicsComputer Graphics8.5 z 缓冲器算法和扫描线算法

克服

Computer GraphicsComputer Graphics扫描线 z 缓冲器算法

算法思想

Computer GraphicsComputer Graphics8.5z 缓冲器算法和扫描线算法

每处理一条扫描线,都要检查各多边形是否和该线相交,还要计算多边形所在平面上很多点的 z值,需要花费很大的计算

采取类似多边形扫描转换的扫描线算法处理,提高效率

x,y( )

Computer GraphicsComputer Graphics8.5z 缓冲器算法和扫描线算法

数据结构数据结构

1多边形 Y 筒

系数 a , b , c和 dΔy 属性 color编号 IP

2边 Y 筒

上端点 x 坐标的值Δy Δx 编号 IP

3

多边形活化表 .

多边形活化表中记录了在 平面上的投影和当前考虑的扫描线相交的多边形

4

边活化表

边活化表中存放多边形的边和当前扫描线相交的边对

Computer GraphicsComputer Graphics

3 6 7 8 1110

11

9

8

7

1

3

Ⅰ Ⅱ

图 8.15 要消隐的物体

xo

多边形 y筒

边 y筒

1/710 7 2

8 2 1 2

多边形活化表

1,,,

;3,0,7

;3,1,4

111IPzzz

yxx

yxx

yxl

rrr

lll

2,,,

;5,7

1,

7

210

;5,6

5,

6

56

222IPzzz

yxx

yxx

yxl

rrr

lll

边活化表

Computer GraphicsComputer Graphics算法如下

建立多边形 Y筒和边Y 筒,初始化多边形和边的活化表为空。

1TEXT

2

以最上面的扫描线为当前扫描线。

4

检查多边形 Y 筒若有新的多边形涉及当前扫描线,则把它放入多边形活化表中。若有新的多边形加入多边形活化表,则要把该多边形在 平面上的投影和扫描线相交的边对加入边活化表中。

对当前扫描线 y ,把帧缓冲器相应行置成底色,z 缓冲器的各单元放 z 的极小值

3

若所有扫描线都已经处理完,则算法结束,否则选下一条扫描线为当前扫描线,转步骤 3

65

对边活化表中的每个边对,令 ,对每一个满足 的坐标为 的像素从左到右依次进行处理。

lx zz

rl xxx

),( yx

Computer GraphicsComputer Graphics对边活化表和多边形活化表修改

1 )、修改边活化表,对每一边做如下计算

若 Δyl 或 Δyr小于 0 ,相应的边就要从一个边对中去掉,并从 y 筒中找到合适的边来代替。若这两条边同时结束于某一点,则去掉这一边对。若 Δyl和 Δyr都不小于 0 ,则修改 为

修改后的表便是新扫描线的边活话表。2 )、修改多边形活化表。令 ,若 ,则将该多边形

从多边形活化表中删除。

1 -y y1, -y y rrll

算法步骤: -- 对边活化表修改

r r r l l lx x x x x x

ylxll z xzz z

llr zxx ,,

1 yy 0y

Computer GraphicsComputer Graphics8.6 优先级排序表算法

模拟示例

Computer GraphicsComputer Graphics8.6 优先级排序表算法

算法思想 优先级排序表算法按多边形离观察者的远近来建立一个

多边形排序表,距观察者远的优先级低,近的优先级高 从优先级低的多边形开始,依次把多边形的颜色填入帧

缓冲存储器中 表中距观察者近的元素覆盖帧缓冲存储器中原有的内容 当优先级最高的多边形的图形送入帧缓冲器后,整幅图

形就形成了

Computer GraphicsComputer Graphics8.6 优先级排序表算法

优先级排序表算法的关键在于对多边形做正确的排序动态的算法:

1. 根据每个多边形顶点 z 坐标的极小值 zmin 的大小,按由小到大对它们做初步排序,并把它们组成一个链表

2. 若链表中只有一个多边形,则算法结束。否则取表头多边形为 P。

3. 设 Q 为链表中 P之外的任一多边形。若对所有 Q 都有 > , 则 P不会遮挡其它多边形,为优先级最低的多边形,在链表中去除 P,转( 2 );否则,若所有 Q 都满足下面四项条件中的一项,则在链表中去除 P,转( 2)。若不满足此四项条件中任何一个的 Q ,交换 P和Q ,转( 3 )。

minzQmaxzP

Computer GraphicsComputer Graphics四项条件

P 和 Q 在 平 面 oxy上的投影不相交

Q 的各顶点均在P的近视点的一

P 的各顶点均在 Q 的远离视

点的一侧

P和 Q 在 oxy 平面上投影的边界盒在 x 或 y 方向上不相交

Computer GraphicsComputer Graphics特殊情况

解决:图 8.22 ,把多边形序列中原多边形 P从序列中去掉,而把 P分成的两个多边形加入链表中,这样可避免使多边形 P和 Q不断地循环进行交换

图 8.21 互相遮挡

图 8.22 用 Q 所在平面把 P 一分为二

Computer GraphicsComputer Graphics用来解决动态显示问题时用来解决动态显示问题时 ,,可大大提高效率可大大提高效率

对飞机驾驶员着陆进行模拟训练时要显示消隐后的跑道周围情况,这时景物是不变的,仅视点发生变化。可对不同的视点位置把景物的优先级排序表预先算好,然后再用油画家算法显示图形,这样便可使消隐过程加速,实现动态显示

图 8.23 视点在不同区域有不同的优先级

A

①②③

B

②①③

C

③②①

D

③①②

视点所在区域

 

优先级表

优先级表

Computer GraphicsComputer Graphics8.7 光线投射算法

原理:要处理的场景中有无限多条光线,从采样的角度讲我们仅对穿过像素的光线感兴趣,因此,可考虑从像素出发,逆向追踪射入场景的光线路径

Computer GraphicsComputer Graphics具体做法是:

由视点出发穿过观察平面上一像素向场景发射一条射线 ( 如图 8.25)

求出射线与场景中各物体表面的交点 离视点最近的交点的颜色即为像素要填的颜色。 光线投射算法对于包含曲面,特别是包含球面的场景有很高的效率。

图 8.25 一条由象素点射入场景的视线

Computer GraphicsComputer Graphics

z 缓冲器算法 :每次处理一个面片 ,对面片上的每个投影点计算z值,计算出来的值与以前保存的 z值进行比较,从而确定每个像素所对应的可见面片

光线投射算法可看作是 z 缓冲器算法的一

种变形

光线投射算法 :每次处理一个像素,并沿光线的投射路径计算出该像素所对应的所有面片的 z值。

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

),( zxfy

(a)未消隐的曲面表示

(b) 消隐的曲面表示

( , ), 0,1,2, ,iy f x z i n

( , ), 0 1 2jy f x z j , , , ,m

( 1) ( 1)n m

, 0,1,2, ,iz z i n , 0 1 2jx x j , , , ,m

),( zxfy

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

参考文献 [6] 中,简单的算法 先考虑对应 z=zi=const 的一族曲线的消隐算法。

如果图形显示器在水平方向有M个象素,则建立M 个内存单元 ,在这些单元是先放上初值,初值应取成小于 min{ ( , )}if x z

][ jyT

M 初值

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

设 平面 是最靠近观察者的,从平面 对应的曲线 开始,对水平方向每个像素的对应 坐标值 平面对应的曲线上的点都是可见的 . 处理完 平面对应的曲线后,然后对平面 对应的曲线做如

下处理 若 是可见点,并把 内容换成 若 是不可见点, 内容不变。

一条一条曲线进行处理,就得到一组消除隐藏线的曲线族

0 , 0,1,2, , 0iz z ih i n h

nzz nzz

( , )ny f x z x jx

( , )jn j ny f x z

nzz

nzz 1 nzz

][ jyy Tjn ),,( njnj zyx ][ jyT jny][ jyy Tjn ),,( njnj zyx ][ jyT

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

左边的图是没有经过消隐的三条曲线,右边的图是经过消隐后的三条曲线。

图 8.27 一组曲线族的消隐过程

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

上述方法对图 8.26 中的曲面的凹下部分是不适用的(图中c处)。

解决办法:建立M个单元 。它的初值取成大于 ,

图8.26

c

M

][ jyT

][ jyB

max{ ( , )}if x z

Computer GraphicsComputer Graphics8.8 曲面的隐藏线消除

每次求出若 或 则 可见 否则不可见

若 则 若 则 用 和 两族曲线表示曲面 时实现消隐的正确做法:

对两族曲线一起做即处理好平面 上 至 一段曲线后,立即处理平 面 上 至 的一段曲线, 如图 8.28 所示

0( , ), , , 1, , 0, 0 1, 2,ji j i iy f x z z z ih i n n j M , ,

][ jyy Tji ][ jyy Bji ( , , )j ji ix y z

jiT yjy ][

jiB yjy ][

][ jyy Tji

][ jyy Bji

kx xz

x

y

iz z

视点

1iz z

1kx x

),( zxfy j ),( izxfy

kxx

1 izz izz

izz 1 kxxkxx

图8.26

top related