计算机图形学显示变换算法具体程序实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机图形学显示变换算法具体程序实现
数学与软件科学学院实验报告
学期:___2010 至_2011 第__一__ 学期 2010年12月21日课程名称:____计算机图形学 _____ 专业:__信息与计算科学_ 2007级_5_班实验编号: 07 实验项目_____显示变换__
指导教师__庞朝阳_ 姓名:学号: 20070605 __
实验成绩:_____
实验目的:
(1) 了解掌握显示变换的相关知识,知道什么是平行投影和透视投影;
实验内容:
(1) 知道显示变换是什么;
(2) 掌握平行投影变换;
(3) 掌握透视投影变换;
(4) 编写并执行简单的Prolog程序,并熟悉测试或调试的方法。
实验步骤:
(1)显示变换
三维空间中的物体要在二维的屏幕显示出来,必须通过投影的方式把三维物体转换成二维的平面图形。投影的方式有平行投影,透视投影。
平行投影变换
(2)平行投影变换
平行投影可根据投影方向与投影面的夹角分为:正投影和斜投影。当投影方向与投影面垂直时,为正投影;否则为斜投影。
A.正投影
1.假设投影平面垂直于Z轴,且位于Z=Z0外,则在视坐标系中任意一点(X,Y,Z)的投影是过该点的投影线与投影平面的交点,如下图:
Z
则空间点的坐标与投影坐标间关系为:
x`=x , y`=y , z`=z
即
`
`
`1
x y z =
1000010000000001
Z . 1
x y z
2.若投影面与XY 平面重合,即Z0=0,则有:
```1
x y z = 1000010000000001
. 1
x y z
即平面投影的变换矩阵为:
Mz (平)=
1000010000000001
同理可得:
在y0z 平面的投影变换矩阵为:
Mx(平) =
0000010000000001
在x0z 平面的投影变换矩阵为:
My(平) =
10000
00000100
000
2.斜投影 如下图
求空间中任意一点D (x,y,z )在斜面ABC 上的投影。
Step1:确定一定Q,并过P 作斜面的法向量n 。 由=(1,0,1)T
,
=(0,1,-1)T
及 =
* =(1,1,1)T
。单位值得:
=
31⎪⎪⎪⎭
⎫ ⎝⎛111。
P 点坐标为P (1/2,0,1/2)。
Step2:将过点的法向量 平移到原点O ,记该平
移变换为T P
=
⎪⎪
⎪
⎪⎪
⎭
⎫
⎝⎛--10002/110000102/1001。
Step3:将平移后的法向量 (连同斜面)绕x 轴旋转α角度,使斜面与xOz 面垂直,则: cos α=2
2
,则α=4/π , sin α=
2
2,即:
R
x ()α=⎥⎥⎥⎥⎦
⎤
⎢
⎢⎢
⎢⎣⎡-10
00
0cos sin 00sin cos 00001
αααα=
⎥⎥⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎣⎡-10
022220022220000
1
Step4:记旋转后法向量为1
n ,则有:
1
n = R
x
()α*=
31⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛0201
记1
n 与z 轴的夹角为β,则tan β =
2
2,即
sin β=3
1,cos β=
3
2。
Step5:使1
n 连同斜面)绕y 轴旋转-β角度后与z 轴重合,即斜面与xOy 面重合,则: R
y
()β-=
()()()()⎪⎪
⎪
⎪⎪
⎭
⎫
⎝
⎛-----10000cos 0sin 00100sin 0cos ββββ=
⎪⎪⎪⎪⎪⎪⎪⎭
⎫ ⎝
⎛
-100
032031001003
1032
Step6:绕z 轴向xOy 面平行投影(正投影),则
有:
M ()平z
=
⎪⎪
⎪
⎪⎪
⎭
⎫
⎝⎛1000000000100001
Step7:作一系列逆变换,使P 点还原到原来位
置。像上:对任意点D (x,y,z ),它在斜面ABC 上的投影记为D '
(x ’,y ’,z ’,),则有
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡1'''z y x =T 1
-P *R ()α1-x *R ()β1
-y * R
y
()β-* R
x
()α*
T P *
⎥⎥⎥⎥⎦
⎤
⎢⎢⎢⎢⎣⎡1z y x
如原点(0,0,0)在斜面ABC 上的投影点为(1/3, 1/3, 1/3)
②透视投影变换
据投影定义,空间任意一点的透视投影是投影中心与空间点构成的投影线与投影平面的交点。
假设视点(投影中心)为E (0,0,d ),投影平面为xOy 面,空间中任意一点记为P (x ,