第二章计算机图形处理技术基础

Download Report

Transcript 第二章计算机图形处理技术基础

第2章 计算机图形处理技术
1
2.1 图形处理技术基础
2.1.1坐标系
一、坐标系分类
2
1、世界坐标系
世界坐标系(WCS:World Coordinate System)
是最常用的坐标系,也称为自然坐标系和用户坐标系。
它的最常用形式是笛卡儿右手坐标系。如图所示,(a)
为二维图形的坐标系,(b)为三维物体的坐标系。理论
上,世界坐标系是无限大且连续的,也就是说它的定义
域为实数域,即它的坐标从-∞到+∞。它用于定义用户
整图或最高层图形结构,各子图、图元经调用后都放在
用户坐标系的适当位置。
y
y
o
o
x
(a)
x
z
(b)
3
2、造型坐标系
造型坐标系(MCS:Modeling Coordinate System)
是右手坐标系。它是用来描述世界坐标系中每个具体物体的
形状,每个物体均由其自身的造型坐标系定义。
造型坐标系
局部坐标系
世界坐标系
整体坐标系。
3、观察坐标系
观察坐标系(VCS:View Coordinate System)是为
了将三维物体投影到显示屏幕(观察平面)上而建立起来的,
是左手坐标系。
作用:指定裁剪空间,确定物体显示输出的部分;
定义观察平面,世界坐标变换为规格化设
4
备坐标。
4、设备坐标系
图形输出设备(如显示器、绘图机)自身都有一个坐
标系,称之为设备坐标系(DCS:Device Coordinate
System)或物理坐标系。设备坐标系是一个二维平面坐标
系,用于在图形显示设备上定义图形或窗口的位置。
5、规格化设备坐标系
由于不同的图形设备具有不同的设备坐标系,且不同设
备之间坐标范围也不尽相同,为了避免由于设备坐标系与
设备的相关性影响应用程序的可移植性,我们引入与设备
无关的规格化的设备坐标系(NDCS:Normalized Device
Coordinate System)。规格化的设备坐标系的取值范围
是左下角(0.0,0.0),右上角(1.0,1.0)。
5
二、坐标变换过程
为在图形设备上显示和观察所构造的几何图形,通
常需要进行坐标变换,其变换过程如下:
造型坐标系
造型变换
世界坐标系
观察变换
观察坐标系
投影变换
规格化坐标系
设备坐标系
6
2.1.2窗口和视区
一、窗口与视区
1、窗口(Windows)
用户坐标系中的一个矩形区域,可以用其左下角点和右
上角点坐标来表示。只有在这个区域内的图形才能在设备坐
标系下显示输出,其余的将被裁剪掉。窗口可以嵌套,即在
第一层窗口中再定义第二层窗口,在第n层窗口中再定义第
n+1层窗口,在各种CAD系统中经常用到的框选放大操作就
是窗口技术的典型应用。
2、视区(Viewport)
设备坐标系中的一个矩形区域,在图形设备上用来输出
图形的最大区域称之为屏幕域,它是有限的整数域,任何小
于或等于屏幕域的区域都可定义为视区。视区由用户在屏幕
域中用设备坐标定义,一般也由左下角点和右上角
点坐标来表示,同样视区也可以是多层的。而
7
且,在同一屏幕还可以定义多个视区。
窗口与视区如图所示
yv
yw
窗口
视区
xw
xv
通过变换可以把窗口中的图形和视区中的图形一一
对应起来。
输出图形:用户坐标系
设备坐标系
(窗口坐标) (视区坐标)
输入图形:设备坐标系
用户坐标系
(视区坐标) (窗口坐标)
8
二、窗口—视区变换
yw
yv
w yt
v yt
(xw ,yw )
wyb
wxl
wxr
(xv ,yv)
vyb
xw
vxl
vxr x v
设在用户坐标系下定义的窗口为:左下角点的坐标 (wxl,
wyb),右上角点的坐标 (wxr,wyt),该窗口在相应设备坐标
系下定义的视区为(vxl,vyb)、(vxr,vyt)。如果与用户坐标系
中的点W(xw,yw)对应的视区上的点为V(xv,yv),由图可
得:
9
x w  w xl
 x v  v xl
v v  w w
 xr
xl
xr
xl
 y v
y w  w yb
v
yb


 v yt  v yb w yt  w yb
v xr  v xl

a  w  w
xr
xl

b  v  v xr  v xl w
xl
xl

wxr  wxl

v yt  v yb
c 
wyt  wyb


v yt  v yb
wyb
d  v yb 
wyt  wyb

v xr  v xl

 x v  w  w (x w  w xl) v xl

xr
xl

v yt  v yb
 yv 
(y w  w yb) v yb
w yt  w yb

 xv  axw  b

 y v  cyw  d
10
写成矩阵形式为:
 xv  axw  b

 y v  cyw  d
xv
y v 1  x w
yw
 a 0 0
1  0 c 0
b d 1
11
从应用程序 WC 对窗口区 WC 窗口区到视区
得到图形的
的规格化变换
进行裁剪
用户坐标
NDC
视区从规格化
坐标系到设备
坐标系的变换
DC
在图形设备
上输出图形
二维图形输出过程
从应用程序
得到图形的
用户坐标
3D
WC
变换到观
察坐标系
3D
VC
对观察空 3D
2D
投影变换
NDC 变换到 DC 在图形设备
间的用户 VC
到2D的
设备坐
窗口进行
上输出图形
视区
标空间
裁剪
三维图形输出过程
12
窗口
视区
在此值得注意的是:
1、当视区不变时,窗口尺寸缩小则视区图形尺寸变
大,窗口尺寸变大则视区显示尺寸变小。
窗口
13
2、当窗口尺寸不变时,视区的尺寸变化与视区
内显示图形的尺寸变化一致。
视区
窗口
视区
14
3、如果视区的纵横比与窗口的纵横比不一致时,经
变换后的图形在视区中输出时会产生失真现象,因此在定
义窗口和视区时,要保证它们的纵横比一致。
窗口
视区
视区
15
2.1.3图形裁剪
只有位于窗口内的图形才能经过窗口-视图变换送视
区中输出显示,而在用户坐标系中究竟有哪些图形位于窗
口内或窗口外,只有通过裁剪过程才能判别出来,裁剪边
界通常是矩形窗口,也可是任意的多边形。被裁剪的对象
经常是点、线段、字符、多边形等。
16
一、点与字符的裁剪
点的裁剪比较简单,当图形系统的窗口确定之后,
设被裁剪的点的坐标为(x,y),则只有当该点的坐标
满足下式
 w xl  x  w xr

w yb  y  w yt
该点才位于窗口之内,并经过窗口-视图变换后送视
区中显示,否则该点位于窗口之外而被舍去。
17
字符的裁剪,根据裁剪精度不同,可分为三种情况。
如图所示。
(1)字串裁剪
用一个限界矩形来包含整个文本字符串,判断该限界
矩形是否全部位于裁剪窗口的内部,如果是,则字符串全
部保留,如果不是,则字符串全部不可见。这是字符裁剪
的最简单方法,裁剪速度最快,但精度最低。
AUTOCAD
18
(2)字裁剪
类似于串裁剪,但限界矩形以单个字符为单位。
(3)笔划裁剪
通过把一个字符看成一系列短笔划的集合,使字符的裁
剪归结为对组成这些字符的笔划的裁剪,必须逐条直线的进
行。此种方法可以精确地删除字符在窗口外的部分,如实地
反映了字符的裁剪结果,优点是裁剪精度最高,缺点是裁剪
过程比较复杂。
字裁剪
AUTOCAD
笔划裁剪
UTOCA
AUTOCAD
19
二、二维直线段裁剪
线段与窗口的位置关系有如下几种情况
(1)直线段两个端点在窗口内;
(2)直线段两个端点在窗口外,且与窗口不相交;
(3)直线段两个端点在窗口外,且与窗口相交;
(4)直线段一个端点在窗口内,一个端点在窗口外。
屏幕或窗口
从图中我们可以看出,不同位置的线段被窗口边界分成
一段或几段,但其中只有一段落在窗口内,如何找
出落在窗口内线段的起点和终点坐标是关键。常
用的算法有矢量裁剪法、编码裁剪法、中点分割法。
20
1、编码裁剪法
(1)定义编码状态表。
如图所示,延长窗口的各边,将平面空间划分为九
个区域,每个区域有一个四位代码。四位代码意义如下:
A
1000
1010
C
窗口
0001 0000
D B
0010
0101
0110
1001
0100
21
第一位:端点在窗口左边界的左侧代码为1,否则代码为0;
第二位:端点在窗口右边界的右侧代码为1,否则代码为0;
第三位:端点在窗口底边界的下侧代码为1,否则代码为0;
第四位:端点在窗口上边界的上侧代码为1,否则代码为0。
(2)直线段的两个端点按其所在区域被赋予相应代码,
称为端点状态代码。
(3)测试直线段的端点状态,当两端点状态代码都为零,
说明该线段完全位于窗口之内;当两端点的状态代码的位逻辑
“与”不为零,说明线段位于窗外同一侧。
(4)不能通过上述测试的线段,再求它与窗口边界(或
边界的延长线)的有效交点,它将线段分割成两个子段,用上
述两个条件对这两个子段进行测试,舍弃位于窗外的一段,而
对剩余部分再次赋给交点处的端点状态代码,再次
测试,再次求交,直至能判断出裁剪剩余部分直线
段是否位于窗口内或在窗外。
22
2、中点分割法
实际上直线段的裁剪过程即能在用户坐标系中进行,
也能在设备坐标系中进行。由于设备坐标系是整数坐标系,
因此它非常适合于用中点分割法具体实现直线段的裁剪。
中点分割裁剪算法的原理与编码裁剪算法的原理类似,两者
的区别仅在于:当求窗口与直线段的交点时,中点分割法是用
逐次求直线段的中点来逼近其交点,且中点的次数不超过
log2n次,其中n=max{|△x|,|△y|},△x、△y是直线段两端
点在X、Y方向上的增量。
该算法的优点是便于用硬件实现,求两个交点的过程可以并
行进行。
23
三、三维直线段裁剪
以平行投影为例进行说明。
其基本思想是将空间直线段的端点相对于裁剪空间的6个
面转换为6位二进制代码。然后采取简单的逻辑判断,去除裁剪
空间以外的部分,保留裁剪空间以内的部分。
6个裁剪面的方程为:
 x  1,x  1

 y  1,y  1
 z  1,z  1

24
代码意义如下:
第一位:端点在窗口的上侧,即y>1代码为1,否则代码为0;
第二位:端点在窗口的下侧, 即y<-1代码为1,否则代码为0;
第三位:端点在窗口的右侧,即x>1代码为1,否则代码为0;
第四位:端点在窗口的左侧,即x<-1代码为1,否则代码为0;
第五位:端点在窗口的后侧,即z>1代码为1,否则代码为0;
第六位:端点在窗口的前侧, 即z<-1代码为1,否则代码为0。
裁剪步骤:
与二维编码裁剪类似,若线段的两端点的编码都为零,则
线段落在裁剪空间内,应保留;若两端点的位逻辑“与”不为零,
则线段落在窗口空间以外,应舍弃;否则,对此线段进行分段处
理,计算此线段与窗口空间平面的交点,并取有效交点,求出交
点的6位编码,重复上述判断,直到各分段完全保
留
或完全舍弃。
25
四、多边形裁剪
逐边裁剪法(1974年由Sutherland和Hodman提出)
26
逐边裁剪法的原理是:先用窗口的一条边界
对多边形进行裁剪,保留裁剪后位于该边界窗口
内的部分图形,舍弃外部区域的图形,得到一个
或若干个新的封闭多边形。当用窗口的第一条边
界处理完后,在用第二条边界对那些新生成的多
边形进行裁剪,如此下去,直至窗口的四条边界
都裁剪完毕。
27