下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
旋转轴的表示
0glrotate型图形工业标准计算机的三维应用程序通常需要对场景进行全方位观察,这可以通过围绕地面上每个方向的轴向旋转场景来执行。OpenGL作为事实上的图形工业标准,是开发三维工程软件和三维游戏软件的最佳图形开发接口,OpenGL中的glRotate*()函数提供了绕三维空间中任意轴旋转的功能,但是它需要知道旋转轴的三维数据,而目前大多数计算机采用的交互式输入设备(如鼠标)不具备三维输入能力,因此不能直接得到三维空间中的任意轴并利用glRotate*()来旋转场景。本文将讨论在OpenGL中利用鼠标如何简单有效地实现三维场景的任意旋转。1分类坐标系的分类在计算机图形学中,通常会用多个不同的笛卡尔坐标系来构造和显示场景1局部坐标系刚性物体运动时各部分的相对位置保持不变,因此,构造场景中的单个对象时,以该对象上某一点为坐标原点建立一个坐标系,该对象自身定位于其中,这个坐标系就是局部坐标系,用来描述对象的形状。2场景内去—)世界坐标系一旦指定了单个物体的形状,我们就可以把它放到场景中去。这时需要用一个坐标系来表示物体的位置,这就是世界坐标系,计算机图形系统内的其他所有坐标系都是以它为参考的。3观察坐标系由三维物体生成二维图形时需要在世界坐标系中指定观察点、观察参考点以及一个表示视线向上方向的矢量,这些要素构成一个观察坐标系,用以表示对象与观察者的位置关系,也叫做视点坐标系。在OpenGL中,这三种坐标系统均采用右手坐标系,当观察一个三维场景时,观察坐标系就成为描述这个三维场景的最佳选择,以WXYZ表示世界坐标系,EXYZ表示观察坐标系,OXYZ表示局部坐标系,那么在观察坐标系下,这三种坐标系的典型关系如图1所示。2实现任意旋转的先决条件2.1投影方向时,三维生物所体现的旋转角度计算机三维图形技术通过投影变换将三维物体转化为二维图形,因此三维物体上同一个点在旋转前后通常具有不同的投影结果。在正交投影模式下,当旋转轴垂直于投影方向时,三维物体不在旋转轴上的点在旋转前后的投影点的连线必定垂直于旋转轴的投影结果,而连线的长度则决定于旋转角度的大小。在这种情况下若我们以鼠标的位置来表示三维物体上某个点的投影结果,则鼠标位置的改变可以解释为该物体绕某一垂直于投影方向的轴的旋转。基于以上分析,可以对三维旋转问题作如下的转化:鼠标沿屏幕上某一方向的移动等价于三维物体绕三维空间中某一条轴的旋转,该旋转轴平行于屏幕并且垂直于鼠标移动方向,旋转角度由鼠标移动距离来确定。2.2gl作为观察参考点的位置gluLookAt函数是一个OpenGL实用库函数,它定义了一个视变换,其函数声明如下:函数的前三个参数指定观察点(视点)eye的位置,中间三个参数指定观察参考点center的位置,最后三个参数指定视线向上的方向up。GluLookAt相当于定义一个右手系的观察坐标系,它以Eye为原点,Eye-Center为Z轴负向,Up为Y轴正向。为了方便后面的分析与程序设计,对此稍作变化建立了一个右手系的辅助坐标系,它以观察参考点Center为原点,视线方向Eye-Center为Z轴负向,视线向上的方向Up为Y轴,Y轴与Z轴的矢量叉乘结果为X轴,如图2所示。3旋转场景的实现3.1旋转角度的解释在OpenGL中将投影体设置为左右和上下分别对称,则使用gluLookAt函数时,辅助坐标系的原点(center)就总是在显示区域的正中位置,它的Z轴(center-eye)总是垂直屏幕向外,X轴和Y轴总是与屏幕的X、Y方向一致,无论怎样移动观察点和参考点,该坐标系与屏幕的关系不会发生变化。绕一条轴正向旋转场景等价于逆向旋转观察点,因此,旋转整个场景可以通过按相反的方向旋转观察点以及视线向上的方向来实现。为了便于说明,这里只考虑一种简单的情况:世界坐标系和辅助坐标系最初重合且场景操作只有旋转没有平移,即无论如何旋转,辅助坐标系和世界坐标系的原点是重合的。将鼠标从屏幕上的A点移动到B点,相当于辅助坐标系中XY面上的一段矢量AB,设矢量AB的法线为矢量N,则由前述分析可知N垂直于Z轴,故可以求出该法线N,这样我们就可以把鼠标的移动解释为绕XY平面上的矢量N为旋转轴的旋转运动,旋转的角度则由AB的长度来决定。在辅助坐标系和世界坐标系最初位置关系已知的情况下,无论如何旋转,两者之间的关系总是可以通过计算而得到,因此辅助坐标系中XY面上的旋转轴总可以转换为世界坐标系中的一个确定的矢量。在世界坐标系中将观察点及视线向上的方向绕该旋转轴进行反向旋转,这样就实现了整个场景在世界坐标系中的任意旋转。3.2gl作为旋转轴参数设置在文献的基础上,编写了Vector3D和Matrix3D这两个类来实现矢量运算和矩阵运算,类的具体实现在此不详细描述。首先用这两个类定义以下几个变量:获得辅助坐标系的三个轴在世界坐标系中的表示:其中up、eye和center均等于gluLookAt函数中的参数且up已经单位化。获得旋转轴在世界坐标系中的表示:其中OldMouse和Mouse分别表示鼠标的上一位置和当前位置,因为OpenGL和Windows关于Y轴的正向设定刚好相反,所以在MouseTrace的计算中颠倒了Y方向的减法顺序。完成旋转:其中,alpha为旋转的角度,它与鼠标移动轨迹的长度有关。最后将新的观察点和视线向上的方向应用到gluLookAt函数中。将上述代码添加到鼠标移动的响应函数中,就能够实现以世界坐标系原点为中心,按任意方向旋转整个场景的功能。4功能扩展后的各种旋转场景当观察参考点和世界坐标系原点重合时任意旋转三维场景的示例如图3,现在我们考虑更复杂的情况:当它们不重合时,可以将旋转功能扩展为绕观察参考点旋转场景和绕世界原点旋转场景,功能扩展后的效果如图4所示,图4上部为绕世界原点旋转示例,下部为绕观察参考点旋转示例。图3和图4中所绘坐标系均为世界坐标系,两图中观察参考点均位于显示区(图片)的中心。5维旋转本文在分析三维应用中不
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政治专业研究生考试试题与答案分享
- 2026年公务员考试法律知识模拟试题
- 2026年幼儿生活技能训练测试卷
- 2026年消防安全与消防设施习题集
- 2026年浙江省部编版小学语文六年级下册第9单元课后练习题
- 2026年陕西省人教版初中英语上册第6单元同步练习题
- 2026年天津市人教版高中英语必修第一册单元测试卷
- 2026年科学探索竞赛练习题
- 2026年浙江省部编版九年级化学下册金属知识点巩固习题
- 2026年贵州省生态文明建设模拟试卷
- 住院期间病人发热处置流程发热患者应急预案
- 2026广东江门市台山博达企业管理有限公司招聘8人笔试备考试题及答案详解
- 2026人教版三年级上册数学暑假预习每日一练(30天)
- 医院保安社会化服务项目整体服务设想和策划
- DB11-T 2205-2023 建筑垃圾再生回填材料应用技术规程
- 岳阳南湖地区开发策划方案 李澍 彭万
- 2019县级国土资源调查生产成本定额
- 穴位埋线疗法疗法
- 湖南省社会保险费申报测算管理系统
- 语文教育名师名课
- 公司经营管理自查自纠报告
评论
0/150
提交评论