Computer Graphics

45
Computer Graphics 第第第 第第第第

description

Computer Graphics. 第九章 动态消隐. 本章内容. 9.1 图形的数据结构 9.2 消隐算法分类 9.3 隐线算法 9.4 隐面算法. 9.1 图形的数据结构. W.K.Giloi 在其著作 Interactive Computer Graphics 中提出: Computer Graphics= Data Structure+Graphics Algorithms+Language. 9.1.1 图形的几何信息和拓扑信息 9.1.2 基本图形的数据结构 9.1.3 立体表示模型. - PowerPoint PPT Presentation

Transcript of Computer Graphics

Page 1: Computer Graphics

ComputerGraphics

第九章 动态消隐

Page 2: Computer Graphics

9.1 图形的数据结构 9.2 消隐算法分类 9.3 隐线算法9.4 隐面算法

本章内容

Page 3: Computer Graphics

9.1 图形的数据结构 W.K.Giloi在其著作 Interactive Computer Graphics中提出: Computer Graphics=Data Structure+Graphics Algorithms+Language

9.1.1 图形的几何信息和拓扑信息 9.1.2 基本图形的数据结构 9.1.3 立体表示模型

Page 4: Computer Graphics

9.1.1 图形的几何信息和拓扑信息 几何信息:描述几何元素空间位置的信息。拓扑信息:描述几何元素之间相互连接关系的信息。 描述一个物体不仅要有几何信息的描述而且还要有拓扑信息的描述。因为只有几何信息的描述,在表示上存在不惟一性。如图 9-1所示的五个顶点,其几何信息已经确定,如果拓扑信息不同,则可产生图9-2和 9-3所示的两种不同图形。

Page 5: Computer Graphics

9.1.2 基本图形的数据结构

在三维坐标系下,描述一个物体不仅需要顶点表,而且还需要边表和面表,才能完全表达清楚。

立体的数据结构

Page 6: Computer Graphics

顶点 x 坐标 y 坐标 z 坐标P1 x1 = 0 y1 = 0 z1 = 0

P2 x2 = 0 y2 = a z2 = 0

P3 x3 = 0 y3 = a z3 = a

P4 x4 = 0 y4 = 0 z4 = a

P5 x5 = a y5 = 0 z5 = 0

P6 x6 = a y6 = a z6 = 0

P7 x7 = a y7 = a z7 = a

P8 x8 = a y8 = 0 z8 = a

表 9-1 立方体顶点表

Page 7: Computer Graphics

边 起点 终点E1 P1 P2

E2 P2 P3

E3 P3 P4

E4 P4 P1

E5 P5 P6

E6 P6 P7

E7 P7 P8

E8 P8 P5

E9 P1 P5

E10 P2 P6

E11 P3 P7

E12 P4 P8

表 9-2 立方体边表

面 边 1 边 2 边 3 边 4

F1 E1 E4 E3 E2

F2 E5 E6 E7 E8

F3 E9 E8 E12 E4

F4 E10 E2 E11 E6

F5 E1 E10 E5 E9

F6 E3 E12 E7 E11

表 9-3立方体面表

Page 8: Computer Graphics

9.1.3 立体表示模型 计算机三维模型的描述的发展:

线框模型→表面模型→实体模型

所表达的几何体信息越来越完整。

Page 9: Computer Graphics

1.线框模型( Wireframe Model)线框模型是计算机图形学中表示立体最早使用的模型

。线框模型只是用几何体的边线来表示立体的外形,就如同用边线搭出的框架一样,线框模型中没有表面、体积等信息。线框模型只使用顶点表和边表两个数据结构就可以描述面点之间的拓扑关系。

图 9-5所示是一个典型的立方体线框模型。线框模型的优点是可以产生任意方向视图,视图间能保持正确的投影关系。线框模型的缺点也很明显,因为所有棱边全部绘制出来,理解方面容易产生二义性,如图 9-6所示。从原理上说,线框模型不能划分有限元网格、不能进行两个面的求交运算。

Page 10: Computer Graphics

立体线框模型表示

线框模型表示的二义性

Page 11: Computer Graphics

2.表面模型( Surface Model)

表面模型是利用立体的外表面来构造模型,就如同在线框模型上蒙上了一层外皮,使立体具有了一定的轮廓,可以进行消隐处理,但表面模型仍缺乏体积的概念,是一个立体的空壳。与线框模型相比,表面模型增加了一个面表,用以记录边面之间的拓扑关系。

表面模型的优点是可以进行面着色,隐藏面消隐,以及表面积计算,有限元网格划分等。 缺点:无法进行立体之间的相交运算。立方体表面模型如图 9-7所示

Page 12: Computer Graphics

立方体表面模型表示

Page 13: Computer Graphics

3.实体模型( Solid Model)

几何模型发展到实体模型阶段,如同在立体表面模型的内部进行了填充,使之具有了如体积和重量等特性,更能反映立体的真实性,这时的立体才具有“体”的概念。实体模型与表面模型的不同之处在于确定了表面的哪一侧存在实体。在表面模型的基础上可以采用有向棱边隐含地表示出表面的外法矢方向,常使用右手法则取向,四个手指沿闭合的棱边方向,大拇指方向与表面外法矢量方向一致。拓扑合法的立体在相邻两个面的公共边界上,棱边的方向正好相反,如图所示。

Page 14: Computer Graphics

立方体实体模型表示

面 边 1 边 2 边 3 边 4

F1 E1 E4 E3 E2

F2 E5 E6 E7 E8

F3 E9 E8 E12 E4

F4 E10 E2 E11 E6

F5 E1 E10 E5 E9

F6 E3 E12 E7 E11

Page 15: Computer Graphics

实体模型只需将面表改成环表形式,就可确切地分清体内体外,表 9-3中边的顺序已经符合这一要求,也可以作为实体模型的面表。实体模型和线框模型、表面模型的根本区别在于其数据结构不仅记录了全部几何信息,而且记录了全部点、线、面、体的拓扑信息。实体模型常采用集合论中的并、交、差等运算来构造复杂形体。

Page 16: Computer Graphics

9.2 消隐算法分类

无论多么复杂的空间物体,沿视线方向上都只能看到一部分表面,其余的表面背向观察者不可见。计算机图形学的一个重要任务就是对空间物体的表面进行可见性检测,绘制出可见边线和表面。经过消隐后得到的图形称为消隐图。

Page 17: Computer Graphics

根据消隐方法的不同,消隐算法可分为两类:1.隐线算法。用于消除物体上不可见的边界线。隐线算法主要是针对线框模型提出的,它只要求画出物体的各可见棱边。

隐线算法

Page 18: Computer Graphics

隐面算法

2.隐面算法。用于消除物体上不可见的表面。隐面算法主要针对表面模型提出的,它不仅要求画出物体的各个可见棱边,而且还要求填充各个表面。

Page 19: Computer Graphics

计算机图形学的创始人 Southerland根据消隐空间的不同,将消隐算法分为三类:

1.物空间消隐算法:在描述物体的坐标系空间中进行消隐。2.像空间消隐算法:在物体投影后的二维图像空间中进行消隐。3.物像空间消隐算法:在描述物体的坐标系空间和图像空间同时进行消隐。

Page 20: Computer Graphics

9.3 隐线算法

物体的线框模型消隐一般在物空间中进行。物空间消隐算法是根据边界线的可见性检测条件,判断哪些边界线是可见的,哪些边界线是不可见的,在屏幕上只绘制可见边界线。

Page 21: Computer Graphics

9.3.1 凸多面体消隐算法

在消隐问题中,凸多面体消隐是最简单和最基本的情形。凸多面体具备这样的性质:连接立体上不同表面的任意两点的直线完全位于该凸多面体之内。凸多面体由凸多边形构成,其表面要么完全可见,要么完全不可见。凸多面体消隐算法的关键是给出测试其表面边界线可见性的判别式。

Page 22: Computer Graphics

事实上,对于凸多面体的任一个面,可以根据其外法矢量和视矢量的夹角θ来进行可见性检测。如果两个矢量的夹角0°≤θ< 90°时,表示该表面可见;如果 90°< θ≤180°时,表示该表面不可见。

图 9-11 凸多面体

Page 23: Computer Graphics

i j k

u v ux uy uz

vx vy vz

u

v

cosu v

u v

方向:右手拇指与四指垂直,四指指向 u 的方向,弯向 v 的方向,则大拇指指向为矢量积方向。

Page 24: Computer Graphics

以图 9-11为例来进行具体说明。 面 ADCB的外法线矢量N=ADAD;(后面)面 EFGH的外法线矢量N=EFEG; (前面)面 AEHD的外法线矢量N=AEAH; (左面) 已知各顶点的三维坐标时,可求出各表面的外法线矢量。

图 9-11 凸多面体

Page 25: Computer Graphics

H ( xh,yh,z

h )G ( xg,yg,z

g )

E ( xe,ye,z

e )F ( xf,yf,z

f )

图 9-12 计算表面法矢量

Page 26: Computer Graphics

在图 9-12中取前面 EFGH上的一点 E ( xE,yE, zE),其外法矢量为 N ,视矢量为 S ,外法矢量和视矢量的夹角为 θ。

首先借助于点 F ( xF, yF, zF)和点 G ( xG,yG, zG)来计算面的外法矢量。

边矢量 EF的三个分量为:Fx= xF- xE; Fy= yF- yE; Fz= zF-zE;

计算边矢量 EG的三个分量为:Hx= xG- xE; Hy= yG- yE; Hz= zG-zE;

H G

E F

Page 27: Computer Graphics

面 EFGH的外法矢量为两个边矢量的矢量积,外法矢量的三个分量为:

Nx= ; Ny= ; Nz= ;外法矢量表示为: ( 9-1) 式中, i , j , k 分别为三维坐标系的 3 个单位矢量。给定视点位置球面坐标表示为:( , , ),其中

: R 为视径, , 。

yzzy HFHF

zxxz HFHF

xyyx HFHF

kNjNiNN zyx

cossin R sinsin R cosR 0 20

H G

E F

Page 28: Computer Graphics

则对于前面 EFGH上的 E ( xE, yE, zE)点的视矢量分量的计算公式为:

视矢量表示为: ( 9-2)式中, i , j , k 分别为三维坐标系的三个单位矢量。

表面外法矢量和视矢量的数量积为:

Ex xRS cossin

Ey yRS sinsin

Ez zRS cos

kSjSiSS zyx

zzyyxx SNSNSNSN

SN

SNSNSN

SN

SN zzyyxx

cos ( 9-3)

Page 29: Computer Graphics

式( 9-3)中分母为正,所以 cosθ的正负取决于表面外法矢量和视矢量的数量积的分子:

。 凸多面体表面可见性检测条件为: 当 0°≤θ< 90°时, 立方体表面可见,绘该表面多边形;

当 θ=90°时, 表面外法矢量与视矢量垂直,立方体表面多边形退化为一条直线,绘出该直线;

当 90°< θ≤180°时, 立方体表面不可见,不绘制该多边形。

zzyyxx SNSNSN

0x x y y z zN S N S N S

0x x y y z zN S N S N S

0x x y y z zN S N S N S

Page 30: Computer Graphics

立方体消隐前的透视变换图如图 9-13所示,消隐后的透视变换图如图 9-14所示。

图 9-13 消隐前的立方体 图 9-14 消隐后的立方体

Page 31: Computer Graphics

9.4 隐面算法 物体的表面模型输出一般在像空间中

进行消隐。像空间消隐算法属于像素级算法,以屏幕像素为采样单位,确定投影于每一像素的可见表面颜色区域,并将可见表面颜色作为该像素的显示颜色。隐面算法主要包括: Z-Buffer算法、画家算法、区域采样算法等。本节主要介绍最著名的 Z-Buffer算法和画家算法。

Page 32: Computer Graphics

9.4.1 Z-Buffer算法 Catmull在 1974年提出了 Z-Buffer算法

。在物空间内不对立体进行可见性检测,每个面的像素点均以指定颜色全部绘制出来,在像空间中根据深度值确定最终绘制的立体各个表面的像素点颜色。 Z-Buffer算法属于像空间消隐算法。

Page 33: Computer Graphics

Z-Buffer算法也称深度缓冲算法,通常x , y 代表屏幕坐标,而z 则用来表示立体上各个面的深度,故名 Z-Buffer算法。建立三维坐标系如图 9-19所示,三维右手坐标系中心位于立方体体心处,x 轴向右,y 轴向上,z 轴从体心指向观察者, xyz形成右手坐标系。观察者的视线方向沿着z 轴负向,指向 xoy坐标面。对于图示立方体,z 轴与立方体的前面交于(x , y , z1),与立方体的后面交于(x , y , z2)。前面和后面在屏幕上的投影坐标(x , y )相同,但 z1> z2,

( x , y , z1)离观察者近,(x , y , z2)离观察者远。对于投影像素点(x , y ),前面像素点( x , y , z1)的颜色将覆盖后面像素点(x , y , z2)的颜色,显示结果为前面像素点(x , y , z1)的RGB颜色。

Page 34: Computer Graphics

这样 Z-Buffer算法需要建立两个缓冲器:一个是深度缓冲器,用于记录立体上每一个像素的深度值,初始化为立体的最小深度值( z 坐标)。设屏幕像素点如图 9-20所示,则深度缓冲器如图 9-21所示;另一个是帧缓冲器,用于记录立体上每个像素点的颜色值,初始化为屏幕的背景色。帧缓冲器如图 9-22所示。

Z-Buffer算法对立体的各个表面全部进行采样,将采样点变换到屏幕坐标系的图像空间,并记录其深度 z 坐标值。根据采样点在屏幕上的投影位置,将其深度与已存储在帧缓存器中相应像素点处的深度值进行比较。如果新采样点的深度值大于原可见点的深度值,表明新采样点更靠近观察者,遮住了原采样点,则用新采样点处的颜色值更新帧缓存器中相应采样点处的颜色值,同时用新采样点的深度值更新深度缓存器中的采样点的深度值;否则,不作更改。

Page 35: Computer Graphics

图 9-21深度缓冲器 图 9-22帧缓冲器

图 9-20 屏幕像素点

Page 36: Computer Graphics

Z-Buffer算法 实现的难点是如何计算采样点的深度值 z ( x , y )。对图 9-19所示的静止立方体,立方体前面和后面都平行于 xoy坐标面,上面、下面、左面和右面四个表面皆与屏幕坐标系的 xoy面垂直,立方体的投影为正方形,这时,前面和后面的深度值很容易计算,立方体的消隐结果为正方形。本节讲解的是旋转立方体的动态 Z-Buffer消隐算法。

视线方向

当立方体处于图 9-23所示的位置时,六个面皆为都不与屏幕平行,这时需要根据每个面的平面方程计算其上各个像素点深度值,这里需要用到第四章已经讲解的有效边表算法来访问面上的每一个像素点进行消隐。

Page 37: Computer Graphics

对于图 9-24所示的立方体表面,其平面一般方程为:

( 9-9)

式中系数 A , B , C 是该平面的一个法矢量的坐标,即

0 DCzByAx

CBAn ,,

Page 38: Computer Graphics

根据表面顶点的坐标值可以计算出两个边矢量:

矢量 矢量 根据两个边矢量的叉积,可求得系数 A

, B , C :

将 A 、 B 、 C 和点( x1,y1,z1)代入方程( 9-9),得:

12121221 ,, zzyyxxPP

13131331 ,, zzyyxxPP

)()()()( 31213121 yyzzzzyyA

)()()()( 31213121 zzxxxxzzB

)()()()( 31213121 xxyyyyxxC

111 CzByAxD

Page 39: Computer Graphics

这样,从方程( 9-9)可以得到当前像素点( x , y )处的深度值:

这里,如果 C = 0 ,说明多边形表面的法矢量与 z 轴垂直,在 xoy面内的投影为一条直线,在算法中可以不予以考虑。

如果已知扫描线 yi与多边形相交的最左边的像素点坐标为( xi, yi)处的深度值 z( xi, yi),其相邻点( xi+1, yi)处的深度值为 z ( xi+1, yi)。

C

DByAxyxz

),(

11

( )( , ) ( , )i ii i i i

A x By D Az x y z x y

C C

Page 40: Computer Graphics

计算出多边形每个面上各个像素点的深度值后,就可以使用 Z-Buffer算法进行消隐,旋转立方体消隐效果如图 9-25所示。使用 Z-Buffer算法可以绘制带有交叉面的立体图形,如图 9-26所示,这种图形由于同一个面的深度值不一样,只能使用Z-Buffer算法实现。图 9-27所示为移动交叉面的一个组件的动态过程。

Page 41: Computer Graphics

图 9-25 不同角度的立方体消隐图

图 9-26 交叉面的Z-Buffer算法

图 9-27 交叉面的组件可移动 的 Z-Buffer算法

Page 42: Computer Graphics

Z-Buffer算法是在像素级上以近物取代远物的消隐算法,与立体表面在屏幕上的出现顺序无关。 Z-Buffer算法原理简单,有利于硬件实现,并且不需要进行排序,但Z-Buffer算法最大的缺点是占用大量内存空间。 对于 1024×768的屏幕客户区,每个数组需要占用 1024×768×2个字节存储单元。一般处理方法是只在立体投影所占用的屏幕范围内建立缓冲器数组,可以有效减少存储容量,但这时要考虑缓冲器数组下标和屏幕坐标系中像素点位置( x,y)的对应关系。

Page 43: Computer Graphics

9.4.2 画家算法 计算机绘图时,屏幕颜色不能堆积,只能按

照景色离视点距离的远近,用近景颜色取代远景颜色,这称为画家算法。画家算法是在物空间内对立体表面进行优先级排序,在像空间内进行消隐,属于物像空间消隐算法。画家算法又称深度排序算法。原理是,先把

屏幕色设为背景色,再把物体的各个面按其离视点距离的远近排序形成深度优先级表,离视点远者优先级低,位于表头;离视点近者优先级高,位于表尾。然后按从表头到表尾的顺序绘制各个表面。优先级高的表面颜色取代优先级低的表面颜色,相当于消除了隐藏面。

Page 44: Computer Graphics
Page 45: Computer Graphics

9.5 本章小结 本章主要讲解了三维图形的动态消隐算法。三维图形的消隐算法分为隐线算法和隐面算法。隐线算法主要针对线框模型进行,根据表面法矢量和视矢量的夹角进行可见性判断,不需要计算面的深度值;隐面算法主要针对表面模型进行,隐面算法是像素级消隐算法,需要动态计算每个面上各像素点的深度值,有一定难度,请读者参阅第 4 章的多边形填充的有效边表算法。