第 7章 三维图形的显示基础
----图形的集合变换、投影与裁剪
赵立强
7.1 三维图形的几何变换
三维图形的几何变换, 投影与裁剪三步骤是三维图形的显示基础, 又
成为三维图形的观察运算 。
7,1 三维图形的几何变换
与二维图形几何变换类似, 三维图形几何变换也在其对应的齐次坐标
系中进行 。 变换矩阵形式为:
?
?
?
?
?
?
?
?
?
?
?
?
?
1
0
0
0
NML
IHG
FED
CBA
T
三维几何变换包括平移、旋转、比例、错切、反射、逆变换、坐标变
换。三维几何变换可以表示为公式,或三维齐次坐标和 4× 4变换矩阵
的乘积。下面矩阵乘积来描述三维几何变换。并记变换前物体的坐标
为 [x,y,z,1];变换后物体的坐标为 [x′,y′,z′,1] 。变换记为:
Tzyxzyx ????? ]1,,,[]1,,,[
一、平移变换
通过参数( L,M,N),可以将点( x,y,z)平移至点( x′,y′,z′,1 ),其矩阵
变换表达式:
?
?
?
?
?
?
?
?
?
?
?
?
?????
1
0100
0010
0001
]1,,,[]1,,,[
NML
zyxzyx
x
z
y
L
N
M
二、比例变换
矩阵中对角元素提供对图形比例变换的功能,因此一个点相对于原点进
行比例变换,其矩阵变换表达式:
?
?
?
?
?
?
?
?
?
?
?
?
?????
1000
000
000
000
]1,,,[]1,,,[
I
E
A
zyxzyx
x
z
y
A=1.25
E=2
Z=1.5
三、错切变换
x
z
y
x
z
y
错切变换是画斜投影图形的基础 (一般不用它来构造复杂图形 ),按错切的方
向不同,它可分为 6种不同的基本形式,下面介绍其中的两种常用形式,
1.沿 X方向含 Z分量的一个错切变换
用此矩阵对长方体进行错切变换,其效果如图所示。当 G>0时,沿十 X方向产生
错切;当 G<b时,沿 —X方向产生错切;当 G为常数时,则 Z坐标值越大,其错切
分量也越大。
?
?
?
?
?
?
?
?
?
?
?
?
?????
1000
01
01
01
]1,,,[]1,,,[
HG
FD
CB
zyxzyx
长方体沿 X,方向含 Z分量的错切变换效果
这种错切变换的矩阵形式为,
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
010
0010
0001
G
T
三、错切变换
x
z
y
x
z
y
2.沿 y方向含 Z分量的一个错切变换
用此矩阵对长方体进行错切变换,其效果如图所示。当 H>0时,沿 +y
方向产生错切;当 H<0时,沿 —y方向产生错切;当 H为常数时,则 Z坐
标值越大,其错切分量也越大。
这种错切变换的矩阵形式为,
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
010
0010
0001
H
T
长方体沿; y方向含 Z分量的错切变换效果
四、反射变换
在二维空间中,图形的反射变换是图形相对于直线进行的变换,即它在直线
的相反一侧生成一个镜像 (对称 )图形。与此相似,三维反射是一个点相对一个平
面 (镜面 )进行的变换,它在该平面的另一侧生成一个镜像点。显然,若这个平
面是 xy平面 (或记为 z=0平面 ),则一个点的镜像意味着新点的 x,y坐标保持不
变,而其 z坐标绝对值大小不变,但符号相反,如图所示。其矩阵变换表达式为,
0
1000
0100
0010
0001
]1,,,[]1,,,[
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?????
z
zyxzyx
0
1000
0100
0010
0001
?
?
?
?
?
?
?
?
?
?
?
?
??
x
0
1000
0100
0010
0001
?
?
?
?
?
?
?
?
?
?
?
?
?
?
y
同理,相对于 YZ平面( x=0),XZ平面( y=0)的反射变换矩阵:
x
z
y
P
P’
O
五、旋转变换 -- 绕坐标轴的旋转
1.绕坐标轴的旋转
三维空间中的一点绕 Z轴旋转时,其 z坐标值固定不变,只改变其 x,y坐标值。
而它的 x,y坐标变化规律与二维平面空间中点的旋转规律基本类似,因此,点在
三维空间中绕 Z轴旋转的矩阵变换表达式为:
z
zyxzyx
?
?
?
?
?
?
?
?
?
?
?
?
?
?????
1000
0100
00co ss i n
00s i nco s
]1,,,[]1,,,[
??
??
这里规定,θ的旋转方向与 Z轴正向相同,则 θ>0。
同理,点绕 X,y轴正向旋转的变换矩阵分别为:
y
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0c o s0s in
0010
0s in0c o s
??
??
x
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0co ss in0
0s inco s0
0001
??
??
y
x
z
P
P’
O
θ
y
z
P
P’
O θ
x
y
x
z
P
θ P’O
五、旋转变换 —绕 空间任意轴旋转
讨论空间一点绕过坐标系原点轴线 (非坐标轴 )的旋转。设这个过原点
轴的另一个端点为 Q(q1,q2,q3),那么点 P绕 OQ轴的旋转可以通过前面
介绍的基本变换技术的组合得到。
对于空间轴线 OQ,它的方向由其方向余弦定义,即有,
?
?
?
??
?
?
???
???
???
2
3
2
2
2
13
2
3
2
2
2
12
2
3
2
2
2
11
/c o s
/c o s
/c o s
qqqq
qqqq
qqqq
?
?
?
现在再定义一个单位向量 OI,使它与 OQ轴具有相同的轴向,即有,
??
???
?
?
?
?
?
?
cos
cos
cos
c
b
a
那么点 P绕 OQ轴旋转与其绕 OI轴旋转,两者效果是一样的。这里应注
意,旋转角 θ的正向与其旋转轴之间的相互关系应符合右手螺旋法则。
旋转分析
如果让 P点与 OI轴一起旋转,结果使 OI轴与坐标系的 Z轴重合,
么此时 P点变成了 P’ 点,OI轴变成了 oI’ 轴,此时再让 P’点绕 OI’ 轴旋
转 θ角之后,又让 P’点与 OI’ 轴一起旋转,使 OI’ 轴还原至 OI 轴的原来
位置,则这时 P’ 点的旋转效果与直接让 P点绕 OI轴旋转 θ角的效果一
样。
步骤:
1、使 OI轴绕 X轴旋转 φ1到 OI’;
2、使 OI’ 轴绕 Y轴旋转 -φ2到 Z轴;
3、饶 Z轴旋转 θ角 ;
4、饶 Y轴旋转 φ2还原;
5、饶 X轴旋转 -φ1还原 ;
步骤分解(一)
第一步,使 OI轴绕 X轴旋转,使得 OI’ 轴位于 y=0平面中,见图,此
时旋转角度 φ1为:
22
11 co s
cb
c
??
??
221co s cb
c
??? 221s in cb
b
???
故,变换矩阵为:
x
xT
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0co ss in0
0s inco s0
0001
)(
11
11
11 ??
??
?
第二步,使 OI’ 轴绕 Y轴旋转,使其与 Z轴重合,由于 OI 轴绕 X轴旋
转时,其长度不变(仍为单位向量),且 x坐标不变。见图,此时旋转角
度 φ2为:
2212212 c os
||c os cbIO
cb ??
?
?? ??? 222c o s cb ??? a?2sin?
由于 φ2的旋转方向与 Y轴的方向相反,故变换矩阵为:
y
yT
?
?
?
?
?
?
?
?
?
?
?
? ?
??
1000
0c o s0s in
0010
0s in0c o s
)(
22
22
22 ??
??
?
步骤分解(二)
第三步,让 P’ 点绕 Z轴旋转 θ角,变换矩阵为
z
zT
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0100
00co ss in
00s inco s
)(3
??
??
?
第四步,实现第二步的逆运算,饶 Y轴旋转 φ2还原。故变换矩阵为
y
yTT
?
?
?
?
?
?
?
?
?
?
?
?
?
??
1000
0c o s0s in
0010
0s in0c o s
)(
22
22
224 ??
??
?
步骤分解(三)
第五步,实现第一步的逆运算,饶 X轴旋转 -φ1还原。故变换矩阵为
x
xTT
?
?
?
?
?
?
?
?
?
?
?
?
?
???
1000
0co ss in0
0s inco s0
0001
)(
11
11
115 ??
??
?
因此,P点饶任意原点轴的变换矩阵:
?
?
?
?
?
?
?
?
?
?
?
?
?
?????
1000
0
0
0
54321
IHG
FED
CBA
TTTTTT
坐标变换:
TzyxzyxP ??????? ]1[]1[
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
???
???
???
???
???
???
???
???
???
?
??
??
??
?
??
??
??
?
c o s)1(
s in)c o s1(
s in)c o s1(
s in)c o s1(
c o s)1(
s in)c o s1(
s in)c o s1(
s in)c o s1(
c o s)1(
22
22
22
ccI
abcH
bacG
abcF
bbE
cabD
bacC
cabB
aaA
例题
q=input('请输入原点轴的顶点 Q的坐标 ([x y z]):');
a=q(1)/sqrt(q*q'); b=q(2)/sqrt(q*q'); c=q(3)/sqrt(q*q');
ceta=input('请输入绕轴旋转的角度,');
ca=cos(ceta);sa=sin(ceta);
T=zeros(4,4);
T(1,1)=a^2+(1-a^2)*ca; T(1,2)=a*b*(1-ca)+c*sa; T(1,3)=a*c*(1-
ca)-b*sa;
T(2,1)=a*b*(1-ca)-c*sa; T(2,2)=b^2+(1-b^2)*ca; T(2,3)=b*c*(1-
ca)+a*sa;
T(3,1)=a*c*(1-ca)+b*sa; T(3,2)=b*c*(1-ca)-a*sa; T(3,3)=c^2+(1-
c^2)*ca;
T(4,:)=0;T(:,4)=0;T(4,4)=1;
p=input(‘请输入原始点的坐标:’ );
pp=[p 1]*T
六、逆变换与坐标变换
逆变换 ---就是与原变换相反的变换,逆变换的变换矩阵为原变换矩
阵的逆。
与二维图形变换一样,三维图形几何变换也能通过变换坐标系来实现,
并有结论:坐标系的变换与在该坐标系中图形变换的方向相反,但变换
效果与变换矩阵的效果相同。
例:已知在相对坐标系 O’UVW中定义一个平面,现通过矩阵 T,把该平
面切换到绝对坐标系 OXYZ中。求该平面在绝对坐标系中的矩阵表达式。
解:设在 O”UVW坐标系中,该平面为:
Au+Bv+Cw+D=0 或 [u v w 1],[A B C D] T =0
在 OXYZ坐标系中,该平面为:
A’x+B’y+C’z+D’=0 或 [x y z 1],[A’ B’ C’ D’] T =0
根据已知,两坐标系间的变换矩阵位 T,[x y z 1]=[u v w 1].T
则,[u v w 1].T,[A’ B’ C’ D’]T=0 T,[A’ B’ C’ D’] T = [A B C D] T
进而,[A’ B’ C’ D’] T = T –1, [A B C D] T
7.2 三维图形的投影
投影就是从投影中心发出射线,经过三维物体上的每一点后,与投
影平面相交所形成的交点集合,这个集合又称为三维物体在二维投影平
面上的平面几何投影 (简称投影 )。
根据投影中心与投影平面的距离以及投影线与投影平面的夹角关系,
投影又可分为:平行投影、透视投影、正投影和斜投影 4大类。
当投影中心 (射线源 )与投影平面的距离为有限值时,则投影为透视投
影;若此距离为无穷大,则投影为平行投影。平行投影的一个特点是投
影线彼此平行,而正平行投影要求投影线垂直于投影平面,否则为斜平
行投影。
透视投影的特点是投影线彼此成球形放射状照射四周空间,正透视
投影要求存在一条投影中心线垂直于投影平面,且要求其他透视线对称
于投影中心线,否则为斜透视投影。
本节主要介绍平行投影的基本原理、正透视投影的基本计算方法与
相关概念。
一、三维图形常用的坐标系
三维图形常用的坐标系:
第一种坐标系,即用户常用于测量物体尺寸的自然坐标系。自然坐标系又称
右手坐标系,这就是说三维自然坐标系中的 X,y,Z三轴的轴向符合右手螺旋法则,
用矢量公式可表示为,X× Y=Z
第二种坐标系,即观察者 (用户 )用以衡量自然坐标系中的点在观察者眼中位置
的一种尺度,称为观察坐标系。此时观察者的眼睛即观察坐标系的原点,观察者
的视线方向即观察坐标系的 Z轴轴向。所以,在观察坐标系中,其 X,Y,Z三轴的
轴向符合左手螺旋法则。因此人们又称观察坐标系为左手坐标系。人们通常在显
示器屏幕中看到的三维图形,实际上是把右手坐标系中定义的物体投影在左手坐
标系的 XOY平面中所产生的结果。
上述两种坐标系的常用画法如图所示。
X
O
Y
Z
Ye
Xe
Ze
Oe
右手系(自然坐标系) 左手系(观察坐标系)
第三种坐标系,即球面坐标系。这就是说在三维空间中的一个点,
既能用自然坐标系的 x,y,z三个三个直角坐标分量来表示,也能用球面坐标
系的三个有序数 (D,θ,φ)来表示,这两者可相互转换。
?
??
??
s in
c o sc o s
s inc o s
DZ
Dy
Dx
?
?
?
X
O
Y
Z
θ
φ
D
P
二、平行投影的基本原理
平行射线的方向用单位矢量 (xp,yp,zp)来定义,现要求把物体照射在
XOY平面上进行输出显示。
设物体上任一点用坐标 (x1,y1,z1)来表示,那么它在 XOY平面上的
投影坐标用 (x2,y2,0)表示,如图所示,显然此时投影线的参数方程为,
因投影点 (x2,y2,0)在投影线上,故有‘ t=-z1/zp,把它代人上述方程,即
??
??
?
???
???
???
tzzz
tyyy
txxx
p
p
p
1
1
1
??
?
???
???
112
112 )/( )/( zzyyy zzxxx
pp
pp
若令 sxp=xp/zp,syp=yp/zp 。则:
?
?
?
?
?
?
?
?
?
?
?
?
??
?
1000
00
0010
0001
]1[]1[ 111222
ypxp ss
zyxzyx
向坐标平面进行正投影的变换矩阵
显然这里 (x1,y1,z1)代表用户坐标系中物体上的各点坐标,而
(x2,y2,z2)代表着投影平面,即屏幕坐标系下的点坐标。当把物体上的所
有点都经过这种方法处理之后,并按照物体顶点顺序依次连接起来,便
可得到该物体在 XOY平面上的平行投影图形。需要说明,对于平行投影,
一般用其平行投影线方向的单位向量进行有效描述。
根据这一原理,可得下述物体向坐标平面进行正投影所需的变换矩
阵。
当三维物体向 y=0平面上投影时,其投影方向单位矢量为,
O
X
Y
Z
),,( 1111 zyxP
),0,( 222 zxP
0,1,0 ??? ppp zyx
投影线经过空间一点 P1的参数方程为 (见图):
??
?
?
?
?
??
?
1
1
1
zz
tyy
xx
向坐标平面进行正投影的变换矩阵
当 t=y1时,得其在 y=0平面上的投影坐标为,
即有,??
?
?
?
?
?
?
12
2
12
0
zz
y
xx
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0100
0000
0001
]1[]1[ 111222 zyxzyx
故得物体在 y=0平面上垂直投影的变换矩阵为,
同理可得三维物体分别在 x=0,z=0平面上垂直投影的变换矩阵分别为,
?
?
?
?
?
?
?
?
?
?
?
?
1000
0100
0000
0001
0
1000
0000
0010
0001
?
?
?
?
?
?
?
?
?
?
?
?
?
z0
1000
0100
0010
0000
?
?
?
?
?
?
?
?
?
?
?
?
?
x
利用这一结论,可以把前面得出的平行投影方程重写如下:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
??
?
1000
0000
0010
0001
1000
01
0010
0001
]1[]1[ 111222
ypxp ss
zyxzyx
显然矩阵 A是一个在 X,Y轴方向上含有 Z分量的错切变换矩阵,因投影线
方向的单位向量 (xp,yp,zp)中的各个分量一般不为零,故它表示了一个物体
经过斜平行投影所需要的变形效果 (见图 7—1、图 7—2),而投影矩阵 B使
这个变形的物体显示在左手坐标系的 z=0平面中,故有上面表达式。
BAzyx ??? ]1[ 111
主视图、俯视图、侧视图
在如下坐标系下:
主视图:观察者在 X轴正无穷远处观察三维物体在 YOZ平面的平行投影。
俯视图:观察者在 Z轴正无穷远处观察三维物体在 XOY平面的平行投影。
侧视图:观察者在 Y轴正无穷远处观察三维物体在 XOZ平面的平行投影。
三、正透视投影
正透视投影所产生的效果与人们用眼睛观察空间物体所产生的印象
一致,它有较好的立体感。
在正透视投影中,人们常用球面坐标系把左手与右手两种不同的坐
标系联系起来;如图所示。其中,
?D为观察点 Oe至自然坐标系原点 O的距离;
?φ为 Ze轴与 Z轴的夹角,当 φ=0时,Ze轴与 Z轴重合且指向相反;
?θ为 Ze轴在 XOY平面上的垂直投影与 X轴正向的夹角,当 θ=0时,Xe轴
的投影与 Y轴平行且指向相同。
由于用此观察坐标系得到的三
维物体的投影效果与照相机拍摄效
果一致,故称这种观察坐标系为照
相机坐标系。注意,照相机坐标系
的 YeOeZe平面垂直于自然坐标系的
XOY平面。
1.中心投影
在介绍照相机坐标系在空间任意点的正透视投影之前,先介绍当观
察点位于空间自然坐标系的 Z轴上的正透视投影即中心投影。
1.中心投影
设观察点位于自然坐标系的 Z轴上,其对应直角坐标为 (0,0,D),
如图所示。现从观察点处观察自然坐标系中一点 P(x,y,z),则 P点在观
察坐标系中的坐标 (设为 Pe点 )可以通过下述变换求得。
第一步,把右手坐标系平移至 Oe观察点处,对应的变换矩阵 T1:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
100
0100
0010
0001
1
D
T
第二步,把右手坐标系变成左手坐标系,即把 Z轴的方向反射,对应的变
换矩阵 T2为,
第三步,此时 P点在观察坐标系中的坐标为,
注意,此时观察坐标系与自然坐标系之间的相互关系可用球面坐标表示为
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0100
0010
0001
2T
]1[
100
0100
0010
0001
]1[
]1[]1[
21
zDyx
D
zyx
TTzyxzyx
eee
??
?
?
?
?
?
?
?
?
?
?
?
?
?
?
??
???
)02 7 0()( ??DD ???
此时,再把观察坐标系中测量的 Pe点投影至投影平面坐标系中。在
距观察点 d 处 (d又称焦距 )放置一投影平面 X’O’Y’,见图,则视线 OePe只
与投影平面的交点 P’称为 Pe点在投影平面上的投影点 (透视点 ),P’(x’,y’,z’)
点在观察坐标系中的坐标计算如下,
此时,有 z’=d,由 X‘OY‘平面中的相似三角形关系得,
透视点 P’与 Pe之间的关系可用矩阵表示为,
故矩阵 A称为观察坐标系中的透视
变换矩阵 (其投影平面位于 Ze轴 d处 )。
?
?
?
??
?
?
???
???
e
e
e
e
z
ydy
z
xdx
?
?
?
?
?
?
?
?
?
?
?
?
????
1000
/1100
0010
0001
]1[]1[
d
zyxzyx eee
Azyx eee ?? ]1[
注意:上式左边 [xe ye ze ze/d],其次化
为:
?????? ?? 1e
e
e
e
e zzydzxd
若让显示器屏幕的左下角正好位于投影平面的 A点处,则可直接用 x’,
y’(即投影平面坐标,但此时的 z,为焦距而非投影平面坐标 )在显示屏中画
出空间一点 Pe在显示屏中的透视投影图形,即
否则,可以把 Pe点的透视投影效果平移至显示屏中进行有效显示。
由 x’,y’的表达式可以看出,当投影平面距观察点近 (d小 ),其 Pe点的
透视投影图形就小;当 d不变,Pe点距观察点远 (Ze值大 ),其 Pe点的透视投
影图形小,这就是透视投影图形中存在灭点,即透视图形发生变形的原因;
设固定投影平面至 XOY平面的距离为 AO,而当把观察点移至无穷远处
时,有,
eDeeDeeDD xxyyzD
AOD
z
ydy ????
?
?????
???????? lim;limlimlim
即正透视投影变为正平行投影,故平行投影是透视投
影的一个特例。
投影透视
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1000
0000
0010
0001
0000
/1100
0010
0001
]1[]1[ 222
d
zyxzyx eee
2.空间任意点的正透视投影
在中心投影中,由于观察点被固定在 Z轴上,因此用这种方式观察空间物体,
只能得到物体的相似图形,缺少立体感,难以完整想像空间物体的立体形状。只
有在空间的不同位置 (即任意点 )上多方位观察空间物体,才能得到其比较全面的立
体感图形。因此有必要研究在空间任意点上的透视投影。
现设观察点在自然坐标系中任
一位置,这一位置可用球面坐
标 (D,θ,φ)来表示。此时观察坐标
系的 Z轴指向自然坐标系的原点,
相对观察者而言,其 Xe轴指向
右方,Ye轴指向上方。如图所示。
此时在空间有一点 P(x,y,z),
求 P点在观察坐标系和投影平面
坐标系中的表达式。
空间任意点的正透视投影步骤分解
这里仍然用矩阵变换的方法来求解该问题。假设在其推导过程中的
过渡坐标系为 X”Y”Z”。显然观察点目前的位置是,
? ????? c os;s i ns i n;c oss i n ???????? DcDbDa
第一步,把坐标系 XYZ平移至 Oe点处,形成过渡坐标系 X”Y”Z”,其变换
矩阵与点从 Oe处平移至 O点处的变换矩阵一样,所以有,
?
?
?
?
?
?
?
?
?
?
?
?
???
?
1
0100
0010
0001
1
cba
T
然后进行如下四步变换,见图( a)。
第二步,将过渡坐标系绕 Z”轴顺时针方向旋转 90° - θ角度,结果使 Y”
轴与 Z轴相交,见图 (b),其变换矩阵与点绕 Z”轴逆时针方向旋转 90° - θ
角一样,所以有,
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
???
??
???
1000
0100
00s i nc o s
00c o ss i n
1000
0100
00)90c o s ()90s i n (
00)90s i n ()90c o s (
)90(2
??
??
??
??
?
??
??
?
ZTT
第三步,将过渡坐标系绕 X”轴逆时针方向旋转 180 ° - φ角度,结果使 Z”
轴指向自然坐标系的 O点,见图 (c),其变换矩阵与点绕 X”轴顺时针方向
旋转 180 ° - φ角一样,所以有:
?
?
?
?
?
?
?
?
?
?
?
?
???
??
????
1000
0)180c o s ()180s i n (0
0)180s i n ()180c o s (0
0001
)]180([3
??
??
? ??
??
?
xTT
?
?
?
?
?
?
?
?
?
?
?
?
?
??
?
1000
0c o ss in0
0s inc o s0
0001
??
??
第四步,把过渡坐标系变换成左手坐标系,这可通过将其 X”轴反射来达
到,此时,该坐标系即为观察坐标系。注意,坐标轴的反射与点的反射
其变换矩阵是一样的,所以有,
?
?
?
?
?
?
?
?
?
?
?
??
?
1000
0100
0010
0001
4T
这样就完成了把 P点从自然坐标系转换至空
间任意一点处的观察坐标系所需要的基本
变换矩阵,即,
?
?
?
?
?
?
?
?
?
?
?
?
?
????
?????
?????
100
0c o ss i n0
0s i ns i nc o ss i nc o s
0s i nc o sc o sc o ss i n
4321
D
TTTTT
??
?????
?????
因此,P点在观察坐标系中的坐标为
写成标量形式,
? ? ? ? Tzyxzyx eee ?? 11
??
??
?
?????
????
???
Dzyxz
zyxy
yxx
e
e
e
?????
?????
??
c o ss ins ins inc o s
s inc o ss inc o sc o s
c o ss in
根据中心投影的结论,要把上述观察坐标转换成二维投影平面坐标,只
需经过透视与投影变换,即
其中,d为观察点至投影平面的距离。 ?
?
?
??
?
?
???
???
e
e
e
e
z
ydy
z
xdx
例:
x=-10:0.5:10;
y=-10:0.5:10;
[X,Y]=meshgrid(x,y);
Z=7*exp(-0.1*(X.^2+Y.^2));
subplot(1,3,1)
%"视点为( 30,30°, 80 ° ) "
vx=30*sin(80*pi/180)*cos(30*pi/180);
vy=30*sin(80*pi/180)*sin(30*pi/180);
vz=30*cos(80*pi/180);
mesh(X,Y,Z);
view([vx,vy,vz]);
subplot(1,3,2);
%"视点为( 30,45°, 30° ) "
vx1=30*sin(30*pi/180)*cos(45*pi/180);
vy1=30*sin(30*pi/180)*sin(45*pi/180);
vz1=30*cos(30*pi/180);
mesh(X,Y,Z);
view([vx1,vy1,vz1]);
subplot(1,3,3);
%"视点为( 30,0°, 70° ) "
vx2=30*sin(70*pi/180)*cos(0*pi/180);
vy2=30*sin(70*pi/180)*sin(0*pi/180);
vz2=30*cos(70*pi/180);
mesh(X,Y,Z);
view([vx2,vy2,vz2]);
视点为
( 30,30°,80 ° )
视点为
( 30,0°,70 ° )
视点为
( 30,45°,30 ° )
7.3 三维图形的正透视裁剪
在空间任意点的正透视投影公式中,其观察坐标 ([xe ye ze])与投影平面
坐标 (x’,y’)的关系为,
如果简单地运用此公式来产生透视投影图形会产生三个问题,
第一,透视投影图形会超出用户定义的视区范围,对此问题可用平面裁剪
算法解决,把落在视区内的线段输出,但在此之扩必然要做许多不必要的
变换运算,因而费时;
第二,观察点后面的物体有可能会出现在屏幕上,这是二维图形裁剪无法
解决的问题,因而必须对图形进行三维裁剪;
第三,在一条视线中,如果同时存在多个显示点,二维投影平面坐标不能
区分哪些显示点在前,哪些显示点在后,从而无法确定它们之间的前后遮
挡关系,这说明用二维投影平面坐标 (x’,y’)显示三维立体图形时还缺少立
体图形的景深表示或透视深度,而这一点对于三维图形的消隐显示以及裁
剪等都是非常重要的,因此有必要把二维投影平面坐标 (x’,y’)扩展为三维
投影屏幕坐标 (x’,y’,z’)。
?
?
?
??
?
?
???
???
e
e
e
e
z
ydy
z
xdx
一、二维齐次屏幕坐标系与观察空间裁剪范围
在三维图形的裁剪中,若显示屏幕中的视区大小不固定,就会造成在
观察空间的裁剪范围不固定,这将给裁剪运算带来一定的困难。为此重新
定义观察坐标系与显示屏幕视区的相对位置,即把观察坐标系的 Ze轴定义
成垂直穿过视区中心,视点距显示屏的距离为 d,而其 Xe,Ye轴与显示屏
幕的 Xs,Ys轴平行且同向;另设视区的长、宽分别为 2Sx,2Sy。则齐次屏
幕坐标系中的两分量定义为:
e
e
yy
s
e
e
xx
s z
y
S
d
S
yy
z
x
S
d
S
xx ???????? ;
如图所示,齐次屏幕坐标的大小范围是无量纲
的常数且为:
11;11 ?????? ss yx
设视区的两角点坐标分别为,左下角 (xVmin,yVmin),
右上角 (xVmax,yVmax),则二维齐次屏幕坐标与屏幕
坐标的转换关系为
?
?
?
??
?
?
????
????
2
2
m inm a x
m inm a x
VV
yss
VV
xss
yysyy
xxsxx
?
?
?
??
?
?
??
??
2
2
m inm a x
m inm a x
VV
y
VV
x
yys
xxs
有了上述公式之后,就能把观察坐标系中的一点 Pe(xe,ye,ze)显示在屏
幕上指定的视区中。
为了简化三维图形裁剪运算,通常令 sx=sy=s。即得不等式组,
?
?
?
????
????
ees
d
e
ees
d
e
zyz
zxz
这一不等式组表示了在观察坐标
系中的空间裁剪范围,如图所示。
它是一个正四棱锥体,如果三维
图形位于该正四棱锥体 ze≥d 的
范围内,则该图形在视区中可见;
否则不可见。 这样处理后,就
能避免投影图形超出视区的显示
范围,特别是能避免视区屏幕前
面的点以及视点后面的点都出现
在视区中这一不合理现象。另外,
引入齐次屏幕坐标系避免了不规
则的屏幕视区对三维图形裁剪范
围的不利影响。
二、三维齐次屏幕坐标系与观察空间裁剪算法原理
1.透视深度与观察空间裁剪范围
由于空间任意点的正透视投影与照相机拍摄的相片,即三维景物,是
一致的,而三维景物与二维图形的不同之处在于,从某个观察点去观察一
个景物,这些三维景物有前有后、有明有暗,有些部分可见、有些部分被
遮挡。因此,要正确地显示或绘制三维景物图形或三维图形的透视投影图
形,仅用前面介绍的透视投影或裁剪技术还不能反映景物或透视投影图形
中的前后遮挡隐藏关系。因为在前面的透视投影讨论中,只研究了观察坐
标系中 (xe,ye,ze)与二维齐次屏幕坐标系中相应点 (x’,y’)之间的相互关系,
而没有讨论景物在齐次屏幕坐标系中的前后位置即 透视深度 。这说明,有
必要把二维齐次屏幕坐标 扩展为三维齐次屏幕坐标,其中
用以表示透视深度。那么对于这样两个透视投影点 A( ),
B( ),由于它们在屏幕上的 x,y坐标都相同,因此哪点的透视深
度小 (即 值小 ),则哪点在前并显示在屏幕中;哪点的透视深度大 (即值
大 ),则哪点在后并被前一点遮挡;如果前一点是透明的话,则显示后一点。
ss yx,sss zyx,,
sz sss zyx,,
',,sss zyx
sz sz
下面推导 的表达式。这种变换的实现原则是,观察坐
标系中的直线与平面,在三维齐次屏幕坐标系中仍为直线与平面,不能变
成曲线或曲面。
设观察坐标系中的平面方程 (已知平面 )和变换到三维齐次屏幕坐标系
中的平面方程 (待定平面)分别为
),,( eees zyxfz ?
0
0
????????
????
DzCyBxA
DCzByAx
sss
eee
根据透视投影的计算,''/;/';/' DzCzDCdsBBdsAA
se ???????
设 与 的关系用下述表达式代替:
sz ez ),( 待定????
e
s zz ??
#
式 (#)说明可以任选一组 C‘,D’的值使这一关系式成立,这意味着,
对于观察坐标系中的一个平面,在齐次屏幕坐标系中可选择无数多个平
面与之对应,这就使得人们往往难以确定在齐次屏幕坐标系中,究竟选
哪个平面与观察坐标系中的平面对应起来,因而给求透视投影深度
的数值带来了困难。但可以通过事先规定 ze值的取值范围来解决透视投
影中各点的相对透视深度的计算问题 (每一点的绝对透视深度可用 ze来表
示,但它具有取值不规范等缺陷 )。
sz
透视深度的表示
对照 的取值范围 [-l,1],那么 的相对取值范围似乎也应为
[-l,1),但实际上,规定 的取值范围为 [0,1],对于 [-1,0]的图形,
这里不予讨论。
当规定 ze值的取值范围为 k1≤ze≤ k2时,就意味着观察空间裁剪范围的
缩小,如图所示,此时相对透视深度约定如下:
当 ze= k1时,要求 =0,表示其
相对透视深度最小;
当 ze= k2时,要求 =l,表示其
相对透视深度最大;
sz ?sz
szss yx,
12 /0;/1 kk ???? ????
)1( 1
12
2
ee
s z
k
kk
k
zz ?????
??
因此对两个透视点的深度进行比较
时,值小的点离观察者较近。
sz
透视深度的范围确定、作用
k1,k2值的大小可以根据实际应用的需要来选定。一般说来,选择 k2
的原则是:当 k2值的大小使得在观察空间中一条指定直线的长度正好在投
影平面上变成一个点时为佳;当 k2大于此值时,其后面图形的投影细节模
糊不清,已无多大意义。而 k1则完全可模拟照相机近距离拍摄的过程,当
物体距照相机过近,其图像模糊不清,则该物体不应显示在屏幕中而应被
裁剪掉。
请注意,相对透视深度 不仅是讨论三维图形裁剪算法的条件之一,
而且还是后续有关正透视投影条件下消除隐藏线、隐藏面算法的基础。
对应 k1,k2值,原在观察坐标系中的正四棱锥的可见区间,变为正四
棱台,它为观察空间的裁剪范围 (简称 视见体 ),它要求:
sz
dkk ?? 12
根据上述推导与约定,显然,当点的观察坐标 (xe,ye,ze)满足下述不等
式组时,该点位于视见体之内,它应显示在屏幕视区中,否则该点不
可见而被裁掉。
?
?
?
?
?
??
???
???
21 kzk
zyz
zxz
e
ed
s
eed
s
ed
s
eed
s
2.三维直线编码裁剪算法的基本原理
第一步,定义直线端点的状态编码。
直线的端点状态编码用一个 6位代码定义如下:
第 1位
第 6位
第 5位
第 4位
第 3位第 2位
步骤分解 (2-3)
第二步,测试直线的可见性。
显然,若直线两端点的代码逻辑“或”为全 0,则整条直线段完全位
于视见体之内,该直线可见应输出显示;若直线两端点的代码逻辑“与”
不等于全 0,则直线位于视见体外同一侧,这说明直线段不可见应裁剪掉;
不能通过上述两种测试的直线段,要求该直线与视见体某一平面的交点;
对于求得的新交点,应再赋端点状态编码,并再次进行测试,直至最终
裁掉直线或输出显示直线为止。
第三步,计算直线与视见体各平面交点。
该交点用直线的参数方程与视见体的 6个平面方程分别联立,以求解
有效交点。
)10(
)(
)(
)(
112
112
112
??
??
??
?
???
???
???
t
ztzzz
ytyyy
xtxxx
eeee
eeee
eeee
视见体的 6个
平面方程分别
为,
2
1
kz
kz
wy
wy
wx
wx
e
e
e
e
e
e
?
?
??
?
??
?
直线段的参
数方程为,
此时求解的有效交点的参数 t 应满足 0≤t ≤1,否则求解
的交点为无效交点。无效交点位于直线段的延长线上。
这个直线上的有效交点是否位于视见体之上,还应通过
第二步的测试予以判断解决。
三、裁剪坐标系中的直线裁剪算法
虽然在观察坐标系中,直线的编码裁剪算法能解决直线的裁剪问题,
但如果引入裁剪坐标系,这一运算还能进一步得到简化。
在观察空间中,图形的裁剪范围为
次分量)为引入的中间变量(齐其中,e
e
e
e
z
s
dw
kzk
wyw
wxw
??
??
?
?
?
??
???
???
21
则称 (xc,yc,zc,w)为齐次裁剪坐标系中的 4个分量,由 xc,yc,zc的表达式不难发
现,裁剪坐标系仅是在观察坐标系中的 Z轴方向上发生了影射变化之后所
产生的结果 (两坐标系之间的相互位置关系见图)。
此时图形的相对透视深度:
)(
)(1
12
12
kkd
kzks
wzz
e
e
s ??
??????? ??
若令:
e
e
e
c
ec
ec
z
d
s
w
kkd
ksk
z
kkd
sk
kkd
kzsk
z
yy
xx
??
?
?
??
?
?
?
?
?
?
?
)()()(
)(
12
12
12
2
12
12
裁剪坐标系与观察坐标系的关系
裁剪坐标素仅是在观察坐标系中的 Z轴方向上发生了影射变化之后所
产生的结果 (两坐标系之间的相互位置关系见图 )。显然它们之间的关系可
用变换矩阵表示为:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
1
)(
00
/
)(
00
0010
0001
]1[][
12
12
12
2
kkd
ksk
ds
kkd
sk
zyxwzyx
eeeccc
而齐次屏幕坐标系与裁剪坐标系
之间的转换用变换矩阵可表示为:
][1]1[ wzyxwzyx cccsss ?
可见体的映射
由于在观察坐标系中,当 k1≤ze≤k2时,对应于 0≤ ≤1。由 可知,
此时它要求裁剪坐标系的 zc 分量满足对应关系 0≤ zc ≤w。因此裁剪坐标系中
图形的裁剪范围变为,
sz
cs zwz ??
1
?
?
?
?
?
?
?
??
??
???
???
ed
s
c
c
c
zw
wz
wyw
wxw
0
由此把观察空间的正四棱台裁剪范围影射成裁剪空间中的长方体裁剪范围
(见图 (b),这个长方体又称取景箱,它的大小随 Pc点的 ze值而变化。
直线裁剪算法原理
也就是说,如果在自然坐标系中给定一点 P,由观察参数 (D,θ,φ)可得
它的观察坐标 Pe,进而得其裁剪坐标 Pc,当 Pc的坐标值使得判别式中 6个
不等式同时成立,则 P点可见 (进而可求出它的齐次屏幕坐标 Ps与屏幕坐
标 (xs,ys),并显示该点 );只要不等式组中有一个不等式不成立,则 P点不
可见,应裁掉。因此有下述裁剪坐标系下的直线裁剪算法原理。
由于观察坐标系与裁剪坐标系之间是线性变换,即观察坐标系中的
直线在裁剪坐标系中仍是直线,因而有下述直线的裁剪参数方程。
设直线两端点的裁剪坐标分别为 (x1,y1,z1,w1),(x2,y2,z2,w2)。
裁减范围判定条件,
??
?
??
?
??
?
??
??
??
?
??
??
0
0;
0
0;
0
0
c
c
c
c
c
c
zw
z
yw
yw
xw
xw
?
?
?
?
?
?
?
???
???
???
???
)(
)(
)(
)(
121
121
121
121
wwtww
zztzz
yytyy
xxtxx
10 ??t
?
?
?
?
?
?
?
???????
???
???????
???????
)]())[()()(
)(
)]())[()()(
)]())[()()(
112211
121
112211
112211
zwzwtzwzw
zztzz
ywywtywyw
xwxwxwxw
利用上式计算裁剪参数 t 和裁剪坐标点。
直线裁剪算法步骤
现以 w+x分量 (即取景箱的左平面 )为例,说明直线的裁剪方法。
第一步,当直线的 wl+x1≥0,w2+x2≥0时,显然直线上所有点的 w+x分量都位于取景
箱之内,故其 w+x分量不用裁剪 (即进行 w+x分量的包含测试 )。
第二步,当直线的 w1+x1<0,w2+x2<0时,即直线上所有点的 w+x分量都位于取景
箱之外,也即直线完全位于观察空间视见体外左侧,故整条直线应全部裁掉 (即进
行排斥测试 )。
第三步,当直线的 (w1+x1)(w2+x2)<0时,即直线上一部分点的 w+x分量位于取景箱
之内,另一部分位于其外,故直线的这一分量要裁剪,以求得直线段与取景箱左平
面的交点。
故令 w+x=0,则此时位于取景箱边界上的 w+x裁剪分量所对应的裁剪参数 t为
把此 t代人 (7—46)式即可求得位于取景箱 w+x边界上的裁剪坐标。
第四步,讨论在第三步情况下,裁剪参数子区间 [0,t]与 [t,1]的舍取,略。
第五步,同理可讨论对直线的其余 5个裁剪分量的处理,略。
第六步,直线有效裁剪参数子区间的最后判断处理,略。
)()(
)(
2211
11
xwxw
xwt
???
??