- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章_OpenGL图形变换(一)
PAGE
PAGE - 6 -
第四章 OpenGL图形变换
OpenGL图形变换是OpenGL技术体系的核心内容之一,它的最主要功能是让虚拟世界里的物体动起来,是虚拟世界的动力驱动系统,也可以称之三维图形系统的引擎!
OpenGL图形变换的主要内容包括几何变换、投影变换、裁剪变换、视口变换等,本章尽量以通俗易懂的方式来讲解各技术要点。
4. 1 图形变换浅说
OpenGL图形变换和照相是非常相似的,它们之间的关系大致描述如下。
1、视点变换(View Transformation)
视点变换相当于把相机放到一定的位置上,镜头对准场景。如图4-1所示。
Y
X
Z
观察方向
图4-1 视点变换与相机定位
在OpenGL中,默认情况下,视点变换相当于把相机放到世界坐标系的原点(0,0,0),镜头指向Z轴的负方向,相当于从世界坐标系的原点向屏幕内部的虚拟场景观察。
2、模型变换(Model Transformation)
模型变换相当于场景中人物或对象位置的变化、角度的改变和大小的改变。
需向后向左
移动
气球需放大
需旋转180度
Y
X
Z
观察方向
图4-2 虚拟照相场景中的人物
照相时场景中的人物或对象需要作调整,以便他们位于场景中合适的位置上。有此时候人物不在视野范围内时,还要走动一下,进入镜头场景内,方向不对时,还要转动一下,眼睛转向镜头。比如图4-2所示,照相时,警察不在镜头场景内,他需要向后向移动。中间的企鹅背对镜头,他需要转过向来面向镜头。企鹅向左边的气球中吹气,气球变大。调整后的场景如图4-3所示。
Y
X
观察方向
Z
图4-3 虚拟照相场景中的调整后人物或对象
上述调整过程中的人员移动 和企鹅的转身动作 和气球充气变大 都属于模型变换。
3、投影变换(Projection Transformation)
投影变换相当于调整相机镜头焦距,放大或缩小景物(如图4-4所示)。
Y
Z
X
图4-4 投影变换与相机焦距调整
OpenGL中投影变换的本质功能是定义一个视景体,使视景体外的多余部分被裁剪掉,再把景物变换到一个规则投影体(高、宽、深均为2个单位的立方体)。
4、视口变换(Viewport Transformation)
视口变换相当于在当前窗口中选择一个位置合适,具有一定形状和大小的矩形区域,用来显示最终的三维图像。
5、图形绘制
相当于按下快门照相。它是把上一步得到的规范投影体中的景物投影到投影平面(虚拟的一个平面,我们看不到),形成虚拟带景深的三维图像。然后再把这个图像映射到我们能够看到的视口。
4.2 三维图形的显示流程
下图描述了三维图形的显示流程和步骤。
世界坐
标系中
的三维
物体
视点变换
模型变换
投影
变换
三维
裁剪
视口
变换
图形
在视
口中
显示
图4-5 三维图形的显示流程
4.3 顶点坐标的变换过程
实质上,三维世界中的物体都是用点来描述的,所以上图的显示流程中蕴含了对顶点的一系列变换。具体来说,包含以下变换步骤。
1、调整世界坐标系中的物体的坐标
这是指物体顶点坐标的模型变换,即把物体变换到适当的位置、角度和大小。给定一个顶点v,一个4×4的模型变换矩阵M,则变换后的顶点坐标为。
这里的顶点坐标是齐次坐标,即:(x,y,z,w)。投影变换之前w的值为1,投影变换之后w的值不为1。
2、调整后的世界坐标系中的物体的坐标变换到观察坐标系中的坐标
这指的是物体顶点的视点变换。给定模型变换后的顶点,一个4×4的视点变换矩阵N,则变换后的顶点坐标为。
值得注意的是,在OpenGL中,模型变换矩阵和视点变换矩阵合并成模型视点矩阵,因此以上两步的变换可以一步完成:
给定一个顶点v,一个4×4的模型视点变换矩阵M,则变换后的顶点坐标为。
3、观察坐标系中顶点坐标变换到规范化投影体坐标系
这一步完成投影。给定一个观察坐标系中的顶点v’,一个4×4的投影换矩阵P,则变换后的顶点坐标为。投影变换之后w的值不为1。
4、裁剪
规范化变换后,要进行物体的裁剪,即不在视景体中的物体将被裁剪掉。那些被裁剪掉的物体在生成最终图形的时候不被绘制。
5、投影除法
位于规范化投影体中的物体顶点坐标要除以w,生成真实的规范投影坐标,即(x/w,y/w,z/w,1)。
6、三维规范化投影体坐标变换到屏幕视口坐标
变换的结果是我们能看到的屏幕图像。变换的原理和上面几步的类似,也是用变换矩阵乘顶点坐标。
设规范化投影体中的顶点v’’,三维规范化投影体坐标变换到屏幕视口坐标的变换矩阵为 ,则有。
4.4 视点变换
我们刚开始的时候不去做视点变换,而是把精力集中在其它的变换。这里我们暂且使用OpenGL中的默认视点。正如4.1节所述,默认的视点位于世界坐标系的原点(0
文档评论(0)