三维虚拟场景中三维虚拟仪表程序设计毕业论文.doc_第1页
三维虚拟场景中三维虚拟仪表程序设计毕业论文.doc_第2页
三维虚拟场景中三维虚拟仪表程序设计毕业论文.doc_第3页
三维虚拟场景中三维虚拟仪表程序设计毕业论文.doc_第4页
三维虚拟场景中三维虚拟仪表程序设计毕业论文.doc_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

三维虚拟场景中三维虚拟仪表程序设计毕业论文目 录摘 要IVAbstractV第1章 绪论11.1 什么是三维虚拟仿真11.2 三维虚拟仿真应用行业11.3 三维虚拟仿真技术国内外研究现状21.3.1 美国研究现状21.3.2 日本的研究状况31.3.3 我国三维虚拟仿真技术的研究现状41.4 三维虚拟仿真技术对仪表的仿真41.5 三维虚拟仿真技术与三维虚拟仪表51.6 论文章节安排5第2章 三维虚拟仪表的相关知识62.1 三维虚拟仪表的发展史62.2 常见三维虚拟仪表开发系统62.3 本文所采用的语言和工具62.3.1 常用开发虚拟仪表的语言和工具62.3.2 本文选择的语言和工具62.4 基于OpenSceneGraph程序开发背景和环境介绍72.4.1 基于OpenSceneGraph程序开发背景72.4.2 开发工具VS200892.4.3 C+语言简介92.4.4 开发环境的配置102.5 本章小结13第3章 需求分析153.1 三维虚拟仪表分析153.1.1 一般仪表类型153.1.2 一般仪表的构件和功能153.1.3 三维虚拟仪表的分析设计153.2 三维虚拟仪表的三维模型153.3 语言和工具要求16第4章 概要设计174.1 三维虚拟仪表的组成174.2 背景模板174.3 刻度表174.4 坐标系184.5 总结18第5章 详细设计195.1 osg如何绘制基本几何图元195.1.1 构建几何图元框架和颜色设置195.1.2 设置图元纹理235.2 三维虚拟仪表的绘制275.2.1 三维虚拟仪表背景模板的绘制275.2.2 三维虚拟仪表刻度表的绘制325.2.3 坐标系的绘制385.2.4 文字和数字标签的绘制395.3 三维虚拟仪表功能实现445.3.1 刻度表指针转动功能实现445.3.2 坐标系曲线图绘制功能实现445.3.3 数据数字显示功能的实现455.4 本章小结45结论46致 谢47参考文献48第1章 绪论1.1 什么是三维虚拟仿真三维虚拟仿真技术是一种基于可计算信息的沉浸式交互环境,具体地说,就是采用以计算机技术为核心的现代高科技手段生成逼真的视、听一体化的特定范围的虚拟环境,用户借助必要的设备(鼠标、方向盘等外部配件)以自然的方式与虚拟环境中的对象进行交互作用、相互影响,从而产生亲临等同真实环境的感受和体验。主要优势表现为:不受场地限制;表现效果更为优美、逼真,具有很强的交互性,走进三维虚拟仿真中的虚拟环境,恰如身临其境。1.2 三维虚拟仿真应用行业三维虚拟仿真技术主要可应用的行业有:(1) 建筑:城市规划、道路桥梁建设、场馆展示等随着计算机图形技术的不断发展,人们在不断地尝试和找寻各种适合建筑业的三维图形技术,正因为它比平面图更直观,在很多场合更能说明问题,比如建筑、文化设施的合理性,以及各种周边综合环境的考虑等方面都比平面数据更有说服力。在目前通用的三维技术中,三维虚拟仿真无疑又是一个极具优势的应用技术,在规划应用中已成为规划师的理想选择。传统的三维动画技术对于实际的规划而言并不是很理想,如规划师想换个视觉角度或者换个高度来观察具体的规划成果,动画就不能满足这个简单的要求。三维仿真技术却可以让我们能随意在三维的数字化城市里沿着街道行走,在观察两边建筑的同时,随意停留下来对重点规划地段进行各种规划方案的探讨,我们可以实时地可交互地从各种视角,从各种高度来观察这一新古典主义风格的建筑,以及他同周边环境的关系。 其次,我们所关心的问题是,我们对重点建筑的立面改造或一些新建筑的装修,行道树种的种植或选择,街灯的样式选择,绿地文化景观的设计和布置等都可以实时地交互进行,更改和替换的过程与结果展示时间是分钟级的而不是天或几天的概念,也许这是建筑规划师们的梦寐以求的,如右图就是同一建筑物的两种方案,我们可以随意切换,来比较各自的效果,然后选择最佳的设计方案,这也是三维仿真技术优势的重要体现。最后,还有一点也是很重要的,就是三维数据库的概念,传统的三维效果图对于一个城市的整体规划来说过于局限,简单的对于一个街区来说,一个大城市,一条街少则几公里,大则十几公里,那么沿街将会有多少建筑物?成百上千,靠一张张的效果图显然是不行的,我们无法把握街区的总体效果,更谈不上管理了。传统的三维动画的制作,也是无法胜任这种大数据量的制作任务的。而三维仿真技术却能够支撑这种大数据量的三维图形数据库,管理好相应的项目,协调图形数据同图形可视化硬件之间的关系,使系统能保证在数据量不断扩展的情况下不会产生系统性能的下降,满足我们现时的各种规划要求。(2) 房产:小区环境展示、虚拟样板房、地板瓷砖涂料效果虚拟等作为一家专业的模型设计公司,在经历了多年的房产交易会后感觉到现有的房产模型制作软硬件档次不高、缺乏亮点,千篇一律,从模型上根本无法将精品楼盘和变通楼盘很好的区分开,使客户在选房看房时多少有点疑虑。房产模型品质的高低直接影响潜在客户的购买欲望。而传统的房产模型只能体现位置、绿化、层数等表面事物,根本回答不了客户心中的一万个问号。经过本公司技术人员长期的设计构思,针对楼盘的户型、不同的装修风格、阳台景观、日照等因素制作成多媒体模型控制系统,通过三维虚拟仿真技术进行交互式的展示,当客户查看某一户型时,可以提供几种不同的装修方案给客户浏览,给顾客一种身临其境的感觉。可将三维虚拟仿真系统刻成光盘,在大型房产交易会上分发给有意向的目标客户使客户能随时随地的全面了解房产信息。(3) 交通:道路桥梁规划设计、城市交通仿真、铁道系统仿真等(4) 消防:消防演练、环境熟悉、模拟事故等(5) 军事:数字沙盘、虚拟战场等(6) 设计:设计效果展示等(7) Cg行业:互动广告、三维产品展示等(8) 工业:工程仿真、设备管理、虚拟生产线、高危生产等(9) 文物保护:古迹复原、虚拟漫游等(10) 娱乐:三维PC游戏、模拟器游戏等(11) 地理:气候、植被、水利模拟等(12) 教育:立体几何教学、物理化学课件模拟等1.3 三维虚拟仿真技术国内外研究现状三维虚拟仿真技术一经应用,就向人们展示了诱人的前景,因此世界各国特别是发达国家进行了广泛的研究,并且取得了瞩目的成果。下面主要介绍美国和日本研究现状。1.3.1 美国研究现状美国是三维虚拟仿真技术的发源地,美国的三维虚拟仿真的研究技术水平基本上就代表了国际三维虚拟仿真发展的水平。目前美国在该领域的基础研究主要集中在感知、用户界面、后台软件和硬件等方面。美国宇航局的Ames实验室:将数据手套工程化,使其成为可用性较高的产品。在约翰逊空间中心完成空间站操纵的实时仿真。大量运用了面向座舱的飞行模拟技术。对哈勃太空望远镜的仿真。现在正致力于一个叫“虚拟行星探索”的试验计划。现在NASA已经建立了航空、卫星维护三维虚拟仿真训练系统,空间站三维虚拟仿真训练系统,并且已经建立了可供全国使用的三维虚拟仿真教育系统。北卡罗来纳大学的计算机系是进行三维虚拟仿真技术研究最早最著名的大学。他们主要研究分子建模、航空驾驶、外壳手术仿真、建筑仿真等。Loma Linda大学医学中心的David Warner博士和他的研究小组成功地将计算机图形及三维虚拟仿真技术的设备用于探讨与神经疾病相关的问题,首创了三维虚拟仿真技术儿科治疗法。麻省理工学院(MIT)是研究人工智能、机器人和计算机图形学及动画的先锋,这些技术都是三维虚拟仿真技术的基础,1985年MIT成立了媒体实验室,进行虚拟环境的正规研究。SRI研究中心建立了“视觉感知计划”,研究现有三维虚拟仿真记住的进一步发展。1991年后,SRI进行了利用三维虚拟仿真技术对军用飞机或车辆驾驶的训练研究,试图通过仿真来减少飞行事故。华盛顿大学华盛顿技术中心的人机界面技术实验室(HIT Lab)将三维虚拟仿真技术研究引入了教育、设计、娱乐和制造领域。伊利诺斯州立大学研制出在车辆设计中支持远程协作的分布式VR 系统。乔治梅森大学研制出一套在动态虚拟环境中的流体实时仿真系统。从90 年代初起,美国率先将虚拟现实技术用于军事领域,主要用于以下四个方面:一是虚拟战场环境。二是进行单兵模拟训练。三是实施诸军兵种联合演习。四是进行指挥员训练。1.3.2 日本的研究状况在当前实用虚拟现实技术的研究与开发中日本是居于领先地位的国家之一,主要致力于建立大规模三维虚拟仿真技术知识库的研究。另外在虚拟现实的游戏方面的研究也做了很多工作。东京技术学院精密和智能实验室研究了一个用于建立三维模型的人性化界面。NEC 公司开发了一种虚拟现实系统,它能让操作者都使用“代用手”去处理三维CAD 中的形体模型,该系统通过数据手套把对模型的处理与操作者手的运动联系起来。京都的先进电子通信研究所(ATR)正在开发一套系统,它能用图像处理来识别手势和面部表情,并把它们作为系统输入。日本国际工业和商业部产品科学研究院开发了一种采用X、Y 记录器的受力反馈装置。东京大学的高级科学研究中心将他们的研究重点放在远程控制方面,最近的研究项目是主从系统。该系统可以使用户控制远程摄像系统和一个模拟人手的随动机械人手臂。东京大学原岛研究室开展了 3 项研究:人类面都表情特征的提取、三维结构的判定和三维形状的表示、动态图像的提取。东京大学广濑研究室重点研究虚拟现实的可视化问题。为了克服当前显示和交互作用技术的局限性,他们正在开发一种虚拟全息系统。筑波大学研究一些力反馈显示方法,开发了九自由度的触觉输入器,虚拟行走原型系统。富士通实验室有限公司正在研究虚拟生物与三维虚拟仿真环境的相互作用。他们还在研究虚拟现实中的手势识别,已经开发了一套神经网络姿势识别系统,该系统可以识别姿势,也可以识别表示词的信号语言。1.3.3 我国三维虚拟仿真技术的研究现状和一些发达国家相比,我国三维虚拟仿真技术还有一定的差距,但已引起政府有关部门和科学家们的高度重视。根据我国的国情,制定了开展三维虚拟仿真技术的研究。九五规划、国家自然科学基金委、国家高技术研究发展计划等都把三维虚拟仿真技术列入了研究项目。在紧跟国际新技术的同时,国内一些重点院校,已积极投入到了这一领域的研究工作。国内最早开展此项技术试验的是挂靠在西北工业大学电子工程系的西安虚拟现实工程技术研究中心。该中心的成立,对发挥学校电子信息工程学院等其他院系和研究所在虚拟现实、虚拟仿真与虚拟制造等方面的研究优势将具有积极作用。1.4 三维虚拟仿真技术对仪表的仿真三维虚拟仿真技术室许多相关学科领域交叉、集成的产物。它的研究内容涉及到人工智能、计算机科学、电子学、传感器、计算机图形学、智能控制、心里学等等。虽然这个领域的技术潜力是巨大的,应用前景也是很广阔的,但仍存在着许多尚未解决的理论问题和尚未克服的技术障碍。客观而论,目前三维虚拟现实技术所取得的成就,绝大部分还仅仅限于扩展了计算机的接口能力,仅仅是刚刚开始涉及到人的感知系统和肌肉系统与计算机结合作用问题,还根本未涉及“人在实践中得到的感觉信息是怎样在人的大脑中存储加工处理为人对客观世界的认识”这一重要过程。只有当真正开始涉及并找到对这些问题的技术实现途径时,人和信息处理系统间的隔阂才有可能被彻底的克服。我们期待着有朝一日,三维虚拟仿真技术能对多维信息处理,并成为人进行思维和创造的助手和对人们已有的概念进行深化和获取新概念的有力的工具。1.5 三维虚拟仿真技术与三维虚拟仪表三维虚拟仿真技术是一种基于可计算信息的沉浸式交互环境,具体地说,就是采用以计算机技术为核心的现代高科技手段生成逼真的视、听一体化的特定范围的虚拟环境,用户借助必要的设备(鼠标、方向盘等外部配件)以自然的方式与虚拟环境中的对象进行交互作用、相互影响,从而产生亲临等同真实环境的感受和体验。而三维虚拟仪表则是通过三维虚拟仿真技术通过开发工具开发出来的一件被广泛使用的一类产品。1.6 论文章节安排论文共分 5 章。第1章 绪论,主要介绍什么是三维虚拟仿真技术,它的应用行业,国内研究现状以及它与三维虚拟仪表之间的关系,还有论文的主要内容及章节安排。第2章 主要介绍三维虚拟仪表的发展史,开发三维虚拟仪表常用工具,OpenSceneGraph的简单介绍以及我选择OpenSceneGraph来做本次课题的缘由。 第3章 基于三维虚拟仪表的需求分析第4章 主要介绍三维虚拟仪表的概要设计第5章 主要介绍三维虚拟仪表的详细设计,其中包括刻度表指针旋转、坐标系曲线图的绘制等具体功能的实现。第2章 三维虚拟仪表的相关知识2.1 三维虚拟仪表的发展史现代仪器仪表技术室计算机技术和多重基础学科今夕结合的产物,伴随着计算机技术的发展,新方法、新理论、新领域、新仪器结构相继涌现,电子测量仪器的功能和作用也随之发生剧变。在这种背景之下,20世纪80年代美国国家仪器公司提出了虚拟仪器的概念。作为现代仪器仪表发展方向,虚拟仪器快速发展成为一种新兴产业。美国是仪器的诞生地,也是全球最大的虚拟仪器制造国,并且发展迅速,这些产品在国际市场上拥有很强的竞争力,占据了很大一份市场。2.2 常见三维虚拟仪表开发系统(1)LabVIEW:他是美国一家名为NI公司研制的全图形编程虚拟仪表开发系统,主要包括控制、数据采集、数据分析、数据表示等功能,由于其程序消耗资源多,并且对国产硬件支持少等缺点导致其在市场的使用率落后于C和C+。 (2)LabWindows/CVI:它的功能大致与LabVIEW接近,都是统一个公司研制开发的,不同的地方时它是以ANSIC为核心,可以用C语言对虚拟仪表进行编程。LabWindows/CVI提供来了来了很多使用特征,大大的改进了工作效率,并且LabWindows/CVI是开发LabVIEW驱动程序的最好工具。(3)Visual C+和Visual Basic:Visual C+是一种比较复杂,非专业人员不易掌握的语言,所以在虚拟仪表设计中使用甚少。而Visual Basic开发虚拟仪表系统得先开发出虚拟仪表的专用控件,而这些控件开发需要专业的编程人员,所以也有一定难度。(4)Agilent VEE:它是一种用于仪表优化控制的图形语言。2.3 本文所采用的语言和工具2.3.1 常用开发虚拟仪表的语言和工具通常开发虚拟仪表的相关语言和工具有OpenSceneGraph和VS,OpenSceneGraph和QT,LabVIEW图形化开发工具,GLstudio, IPS编程技术等。2.3.2 本文选择的语言和工具本文采用的是OpenSceneGraph语言和VS2008开发工具来实现本次毕业设计的任务和要求。2.4 基于OpenSceneGraph程序开发背景和环境介绍2.4.1 基于OpenSceneGraph程序开发背景由于该课要设计是要设计三维场景中的三维虚拟仪表,并构建仪表的三维模型,根据仪表驱动数据,实现在三维场景中的仪表动态展示。所以我们需要在程序中实现一个虚拟三维虚拟场景,而OpenSceneGraph可以很方便的为我们创建一个三维场景模型,还有其封装好的类和库为我们的研究提供了便利的条件,并且它里面osg:Drawable类为我们提供的绘制图元的方法都很容易操作和掌握,为我们提供了很多便利条件。此外,OpenSceneGraph是一个开源的并且高性能的三维图形渲染引擎,基于修改过的LGPL协议(OSGPL)免费发布,广泛用于游戏、视觉的仿真、虚拟现实、科学可视化和建模等领域的应用。用具有工业标准的OpenGL为底层平台,使用具有可移植性的ANSI C+编写而成。在封装的基础上,建立了一个面向对象的框架,使编程者们可以摆脱底层的繁琐而又复杂的建模,更有利于应用程序的开发和管理。具备跨平台的特性,可以运行于Windows、UNIX/Linux、Mac OSX、FreeBSD、Solaris和AIX等各类操作系统上。另外OpenSceneGraph还提供了很过有用的工具包以便于更加效率的程序开发。OpenSceneGraph正是基于世界上最流行的场景图形技术,目前越来越多的开发者基于OpenSceneGraph进行图形程序的开发。OpenSceneGraph凭借其强大的功能,开发成果移植性强且具有完善的开发模式受到了业界人士的普遍好评。采用OpenSceneGraph图形引擎克服了传统的OpenGL以及Direct3D难度大、开发周期长的缺点,解决了使用Vega、OpenGVS等商业引擎成本高,不利于产品推广的问题,从实用的角度来说OpenSceneGraph更有优势。目前已经有很多基于OpenSceneGraph的应用去的了成功,如3DVRI、Delta3D、osgPlanet、Remo3D、交通工具仿真系统、虚拟地形系统等等,效果不逊于商业视景渲染软件。如果想要自主开发视景渲染软件的话,OpenSceneGraph是个不错的基础框架选择。OpenSceneGraph的源代码是公开的,它的用户许可方式为被修改过的GNU宽通用公共许可证(GNU Leaser General Public License, LGPL)。OpenSceneGraph与其它三维渲染引擎相比具备的优势可以归为如下几点:(1)快速开发。OpenSceneGraph场景图形内核中几乎封装了OpenGL全部的底层接口。且具有随时支持更新的扩展特性。开发者可以将自己的中心放在与各种场景对象的交互方法上和三维程序开发的实质性内容上,而不必过多的关注底层的代码。(2)高品质、高性能。OpenSceneGraph经历了很多开发成员的反复检查、检测和完善,其核心代码支持多种场景的裁减技术(Culling)、渲染状态排序(State Sort)、细节层次节点(LOD)、显示列表、顶点数组、VBO(Vertex Buffer Object)、FBO(Frame Buffer Object)、PBO(Pixel Buffer Object)、OpenGL着色语言等;以及粒子系统,文字显示,阴影系统,雨、火焰、烟雾、雪等特效模拟,多线程渲染、场景的动态调节等各种机制。(3)可扩展性。基于场景图形的扩展思想,OpenSceneGraph具有强大的可扩展能性,包括各种类型的扩展节点(NodeKits,节点工具箱)、扩展回调、扩展渲染属性、扩展交互事件处理器等,为用户的程序开发提供了灵活的支持能力。(4)可移植性。OpenSceneGraph提供了Windows、IRix、Solaris、HP-UX、UNIX、Linux、 Macosx、AIX和FreeBSD系统的移植能力,基于OpenSceneGraph开发的程序只要经过一次编写就可以编译运行在这些平台上,不需要关心更多的代码移植的细节。(5)开源。OpenSceneGraph为开源引擎,发布和使用基于OpenSceneGraph开发的软件是不需要支付许可费用的;基于OpenSceneGraph开发的程序也不需要再次开放自身的源代码,不存在侵犯软件专利的可能。此外,开放源代码使得开发者可以调试和检查OpenSceneGraph的源代码,了解其内部结构,从而更好的应用到自己的程序中。据世界权威的现代仿真网站的调查统计,OSG在世界仿真软件市场的占有率已超过51%,如图2-1所示。图2-1 世界仿真软件市场占有率综上所述,OpenSceneGraph具有很大的发展前景,并且为我们本次毕业设计提供了许多很便利条件,所以我选择用OpenSceneGraph来做本次毕业设计。2.4.2 开发工具VS2008本次课程设计采用的是OpenSceneGraph,类似于C+,而Microsoft Visual Studio 2008使用的正是C+语言,所以我们选择用Microsoft Visual Studio 2008即VS2008作为我们的开发工具。这里对Microsoft Visual Studio 2008做一个简单的介绍。Microsoft Visual Studio 2008是对Visual Studio 2005一次及时、全面的升级。Microsoft Visual Studio 2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用Visual Studio 2008可以高效的开发Windows应用。设计器中可以实时反映变更,XAML中的智能感知功能可以提高开发效率。同时Visual Studio 2008支持项目模板、部署程序和调试器。Visual Studio 2008可以高效开发Web应用,集成了AJAX 1.0,包含AJAX项目模板,它还可以高效开发Office应用和Mobile应用。Microsoft Visual Studio 2008的系统组件包括:编辑器、编译器、连接器、库。编辑器:编辑器给使用者提供了一个创建和编辑C+源代码的交互平台。提供了大家熟知的常见功能例如:复制(Ctrl+C)、粘贴(Ctrl+V)、剪切(Ctrl+X)等,此外编辑器还提供了用不同颜色来区分不同的语言元素,自动标示关键字等功能。不但使代码的可读性更好了,而且在输入这些单词时如果出现错误还可以提供清楚地指示。编译器:编译器的功能是将源代码转换为目标代码,并且检测和报告编译过程中出现的错误。编译器可以检测各种无效或不可识别的代码并报告错误,还可以检测诸如部分程序永远不会被执行到这样的结构性错误。编译器出的目标代码将被存储在目标文件夹中。编译器产生的目标代码有两种类型,通常使用.OBJ为扩展名。连接器:连接器和编译器一起根据源代码产生各种模块,从作为C+组成部分提供的程序库中添加所需要的代码模块,并把各个模块整合成一个可执行的整体,还能检测并报告程序缺少的组成部分,或引用不存在的库组件等错误。库:库就是微软提供的预先编译好的例程集合,它通过提供了专业的标准代码单元,支持并扩展了C+语言。使用者可以在自己的程序中直接引用这些代码,以执行常见的相关操作。这样就节省了使用者亲自编写并测试实现这些代码所需要的工作量,从而大大的提高了开发的效率。2.4.3 C+语言简介C+语言是一种面向对象的程序开发语言,它是基于C语言发展起来的。凭借其独特的语言机制在计算机科学的各种领域中得到了广泛的应用。面向对象的设计思想是在原来结构化的程序设计方法基础上实现的一个质的飞跃,完美地的体现了面向对象的各种特性。是目前使用非常广泛的面向对象程序语言。2.4.4 开发环境的配置本课题主要使用三维渲染引擎OpenSceneGraph和Microsoft Visual Studio 2008进行开发,所以我们要预先对环境进行配置。这里就介绍一下OpenSceneGraph和Microsoft Visual Studio 2008开发环境的详细配置。首先需要下载安装Microsoft Visual Studio 2008和解压安装OpenScenceGraph的编译包。然后要为OpenSceneGraph配置环境变量,因为我用的是OpenScenceGraph-3.0.0,首先要增加环境变量OPENSCENEGRAPH_VERSION值为3.0.0如图2-2所示。图2-2 OPENSCENEGRAPH_VERSION环境变量示意图之后要增加变量OSGDIR,其值是OpenSceneGraph所安装的目录,如图2-3所示,图中“D:StudyOpenSceneGraph”是我所安装OpenSceneGraph的目录。图2-3 OSGDIR环境变量示意图然后我们还要在Path变量中新增“%OSGDIR%bin;”和“%OSGDIR%binosgPlugins-%OPENSCENEGRAPH_VERSION%”这两项如图2-4所示。接下来我们还要增加环境变量OSG_FILE_PATH,变量值设为“%OSGDIR%data”如图2-5所示。最后我们要增加环境变量OSG_NOTIFY_LEVEL,变量值为“WARN”。如图2-6所示。图2-4 Path中增加内容示意图图2-5 OSG_FILE_PATH环境变量示意图图2-6 OSG_NOTIFY_LEVEL环境变量示意图到这里OpenSceneGraph的环境变量就设置好了,这一设置之后意味着Windows系统可以自动检索到并调用以下两个位置的OpenSceneGraph功能模块和插件文件:D:StudyOpenSceneGraphbinD:StudyOpenSceneGraphbinosgPlugins-3.0.0在PATH变量中添加的环境变量使用了绝对路径,这样做的优点在于,当用户的OpenSceneGraph版本或安装位置改变时,不必再次修改PATH中的内容,直接修改OSGDIR和OPENSCENEGRAPH_VERSION这两个环境变量值即可。此外我们还设置了两个OpenSceneGraph内部专用的环境变量,OSG_FILE_PATH和OSG_NOTIFY_LEVEL,OSG_FILE_PATH主要用于指示数据文件位置,在编写代码读取OpenSceneGraph模型和图像文件的时候,该变量值所写路径中的文件可以被自动搜索到,OSG_NOTIFY_LEVEL的主要作用是指示调试信息输出的条件。都配置好之后我们可以进入Windows控制台下输入#osgViewer cow.osg(#代表当前的路径),如果可显示如图2-7所示效果,则说明配置成功了。接下来我们要进入Microsoft Visual Studio 2008新建一个Win32 Console Application,之后对工程环境进行配置,首先打开工具-选项-文本编辑器-文件扩展名里把“将无扩展文文件映射到”这一栏选中“Microsoft Visual C+”并打上勾,如图2-8所示。接下来我们打开“项目-属性在当前工程版本中(我使用的是Release版)选中配置属性-C/C+-常规”,在“附加包含目录”中填入“$(OSGDIR)include”,如图2-9所示。图2-7 cessna.osg运行效果图图2-8 文本编辑器配置示意图图2-9 头文件目录配置示意图最后打开“配置属性-链接器-常规”,在“附加库目录”栏中填入“$(OSGDIR)lib”并在“配置属性-链接器-输入”的“附加依赖项”中添加“OpenThreads.lib、osg.lib、osgDB.lib、osgViewer.lib、osgGA.lib、osgUtil.lib、osgText.lib,如图2-10所示。图2-10 依赖库配置示意图到这里我们的环境就配置完成了。2.5 本章小结本章主要介绍了开发三维虚拟仪表有哪些常见工具,以及我为什么选择OpenSceneGraph,它有什么优势,它的发展史以及它的组成模块,此外还介绍了本次毕业设计用到的开发工具Microsoft Visual Studio 2008,并对其做了单间介绍,最后对OpenSceneGraph和Microsoft Visual Studio 2008的环境配置做了详细介绍。第3章 需求分析3.1 三维虚拟仪表分析三维虚拟场景中三维虚拟仪表程序设计项目需要设计三维场景中的三维虚拟仪表,构建三维模型,所以首先得对现实生活中的一般仪表进行分析,结合生活中的一般仪表进行分析设计本次毕业设计要设计的三维虚拟仪表。3.1.1 一般仪表类型现实生活中,我们用到的仪表一般常见的有:压力仪表,温度仪表,液位仪表,流量仪表,分析仪表,电工仪器仪表,光学仪表,工业自动化仪表,试验仪器仪表,量具仪表等等。3.1.2 一般仪表的构件和功能现实生活中,一般仪表的构建根据功能的不同,构件也不尽相同,如玻璃温度计和时钟表。玻璃温度计主要由感温泡、玻璃毛细管和刻度标尺三部分组成,它是用来测量温度的。而时钟表主要由时针、分针、秒针和整个仪表盘组成,它是用来显示时间的。3.1.3 三维虚拟仪表的分析设计根据现实生活中的仪表,我们可以设计一个应用广泛的三维虚拟仪表,它的左边是一个类似于时钟的表,由一个外圆,度量刻度和一根指针组成,指针指向的是数据大小,右边则是一个坐标系,在坐标系上显示的是左边仪表数据的变化趋势和大小,而在表的下面则是指针指向的数据大小数字化显示,而这三个功能都需要在一个物体上显示,即背景模板,我们将表、坐标系、数字化显示都放置在这个背景模板上,这样就能比较真实的展现一个三维虚拟仪表的结构和功能了。这类仪表可于速度仪表,即显示速度,也可以用于高度仪表,即显示高度等等。3.2 三维虚拟仪表的三维模型要做好本设计,就要对设计要就有详细的了解和分析。根据三维虚拟场景中三维虚拟仪表程序设计任务书,我将任务书对本设计的要求进行如下分析。本设计要求的是在三维场景中,而在三维场景中,三维坐标系的设置并不是固定不变的,而是根据用户需求设置的,所以在设计三维虚拟仪表的三维模型时,首先要对坐标系进行确定,因为只有确定了坐标系,我们才知道三维模型具体位置在哪儿,该怎么放置它,也才能进行三维模型的设计。在确定坐标系的时候,我们可以以整个场景的中心为原点,然后以这个原点中心绘制三维虚拟仪表的背景模板,这里我们将这个背景模板设置为一个扁平的长方体平板。在这个扁平的长方体平板的左边,我们将绘制刻度表(外圆,度量刻度,指针),在它的右边绘制二维坐标系(坐标系和数据变化曲线图),在它的下方显示数字的动态更新。这样一个完整的三维虚拟仪表的三维模型就建立好了。在显示生活中效果图如3-1所示。图3-1 实际仪表图3.3 语言和工具要求任务书要求设计利用开源图形开发工具OpenSceneGraph的场景管理功能、更新回调机制、帧缓存对象技术,实现模型加载、仪表图形绘制。要求了解虚拟仿真或三维游戏引擎结构及三维场景动态更新的相关技术。要求熟悉开发工具(Visual Studio 2008或QT)及开源三维图形开发包OpenSceneGraph及其开发技术,熟悉面向对象程序设计语言C+及面向对象程序设计方法。 在项目开发周期上,要求采用软件工程方法进行分析、设计、生成。在开发工具使用上,要求使用Visual Studio 2008或者QT。依据任务书的要求,本设计使用OpenSceneGraph开源开发包的相关技术,使用软件工程的软件项目生命周期方法进行分析设计,使用Visual Studio 2008作为开发工具。第4章 概要设计4.1 三维虚拟仪表的组成在三维虚拟仪表中,主要由背景模板(一块扁平的长方体平板)、刻度表(外圆、度量刻度和指针)、坐标系(二维坐标系和该坐标系上的曲线图)和指针指向的数据数字化显示的区域。其视图如图4-1所示。图4-1 三维虚拟仪表组成图4.2 背景模板在建立三维虚拟仪表模型前,要为其建立一个三维的背景模板模型,就像是现实生活中仪表的一种载体,如钟表,它就是将表镶嵌在一个长方形或者其它形状物体的内侧,所以要将仪表镶嵌或者贴在这个载体上。只是在这里我们为了建立模型方便,将这个背景模板设置成一个扁平的长方体平板。在建立这个长方体平板三维模型时时,上一章说了,将整个场景的中心位置作为整个坐标系的原点,所以,我们只需以这个坐标原点为中心,绘制8个顶点,调整好这8个顶点的坐标位置,然后设置它的连接方式,就能形成一个扁平的长方体平板。这样一块长方体平板三维模型就这样建好了。4.3 刻度表在上一节中,我们已经建立好了一个扁平的长方体平板三维模型,在此基础上,我们要建立刻度表的模型,因为这本身就是在三维场景中,所以只需在长方体平板上生成一个刻度表就行了,就好像一张纸贴在了墙上,墙动,纸也会跟着动。首先生成刻度表的外圆,我们可以将它看成是许许多多的点围起来的一个点圆,然后用线将这些相邻的点连接起来就成为了一个圆,而外圆内侧的度量刻度则可以看成一根根短的线段,而每一根线段是由线段的两个端点用线连接起来而成的,这样我们就可以很快的生成外圆和外圆内侧的度量刻度模型,在生成这两个模型后,生成指针模型就很容易了,因为指针我们也可以看成是由一条线段的两个端点连接起来的一条线段。这样我们就建立好了刻度表的模型了。4.4 坐标系在建立好扁平长方体平板和刻度表的三维模型后,我们该在背景模板的右方生成坐标系模型了,生成坐标系模型的方法与生成指针模型的方法一样,我们可以讲坐标系看成是由两条相互垂直相交的线段,每条线段则是由两个顶点用线连接起来生成的,所以,同样的方式,我们就可以生成坐标系的模型了。4.5 总结根据上面的方法和顺序,我们总结一下本设计进行三维虚拟仪表三维模型设计的流程图,如图4-2所示。图4-2 三维虚拟仪表模型生成流程图第5章 详细设计5.1 osg如何绘制基本几何图元首先我们要绘制一个图形就要知道OSG是如何来绘制基本图元的。其次是画出图元之后,并不代表完事了,如果我们想得到一个逼真的实体,我们就要设置它的颜色,纹理,材质,法线和光照等等,这样才能算绘制好了一个几何图元。5.1.1 构建几何图元框架和颜色设置在OpenGL中是使用顶点索引机制来高效地构建几何图元,同样在OSG中也是使用顶点索引机制来高效地构建几何图元,即重复适用有限的顶点数据,组成多种不同的图元,进而构成图元的各个点(GL_POINT)、线段(GL_LINES)、线条带(GL_LINE_STRIP)、闭环线(GL_LINE_LOOP)、三角形(GL_TRIANGLES)、三角条带(GL_TRIANGLE_STRIP)、三角扇面(GL_TRIANGLE_FAN)、四边形(GL_QUADS)、四边形条带(GL_QUAD_STRIP)以及多边形(GL_POLYGON)。除此之外,我们还需要考虑顶点坐标数据与其他属性数组内容不匹配的问题,如何将顶点与属性相关联,或者说,如何将他们“绑定”在一起,这也是不可忽视的一个问题,但是Geometry类提供了完整的对于顶点数组、图元构建和属性绑定的操作接口。其基本结构如表5-1所示。表5-1 osg:Geometry类基本结构表Geometry()默认构造函数Void setVertexArray(Array*array)Array* getVertexArray()设置/获取顶点空间位置坐标的数组Void NormalArray(Array*array)Array* getNormalArray()设置/获取顶点法线的数组Void setNormalBinding(AttributeBinding ab)AttributeBinding getNormalBinding()const设置/获取顶点法线的绑定方式Void setCorlorArray(Array*array)Array* getCorlorArray()设置/获取顶点颜色的数组Void setCorlorBinding(AttributeBinding ab)AttributeBinding getCorlorBinding()const设置/获取顶点颜色的绑定方式Void setSecondaryCorlorArray(Array*array)Array* getSecondaryCorlorArray()设置/获取顶点辅助颜色的数组续表Void setSecondaryCorlorBindingArray(Array*array)AttributeBinding getSecondaryCorlorBinding()const设置/获取顶点辅助颜色的绑定方式Void setFogVoordArray(Array*array)Array* getFogVoordArray()设置/获取顶点雾坐标的数组Void setFogVoordBindingArray(AttributeBinding ab)AttributeBinding getFogVoordBindingArray()const设置/获取顶点雾坐标的绑定方式Void setTexCoorArray(unsigned int i,Array*array)Array* getTexCoordArray(unsigned int i)设置/获取指定纹理单元中顶点纹理坐标的数组Void setVertexAttribArray(unsigned int i,Array*array)Array* getVertexAttribArray(unsigned int i)设置/获取指定顶点属性(0-15)的数组Void setVertex AttributeBinding(unsigned int i,AttributeBinding ab)AttributeBinding getVertex AttributeBinding(unsigned int i)设置/获取指定顶点属性(0-15)的绑定方式Unsigned int getNumPrimitiveSets()const获取当前已设置的图元组的数目PrimitiveSet* getPrimitiveSet(unsigned int i)获取指定位置的图元组bool setPrimitiveSet(unsigned int i ,PrimitiveSet*)在指定位置设置一个新的图元组,并替换原有的图元组bool insertPrimitive(unsigned int i,PrimitiveSet*)在指定位置插入一个图元组续表bool removePrimitive(unsigned int i,unsigned int numToRemove)从指定索引位置开始,删除指定数目的图元组Unsigned int getPrimitiveSetIndex(const PrimitiveSet*)const获取某个图元组的索引位置这里枚举量AttributeBinding用于设置顶点属性数据与顶点的绑定方式,简化了OpenGL顶点属性的设置过程。在OSG中使用PrimitiveSet类来表达图元组的信息,如果没有设置任何图元组,几何体对象将无法正常工作,图元组是用于实现顶点索引机制,将顶点数据有序地构成不同几何形状的重要方式。PrimitiveSet类按照与OpenGL相似的方式,定义了10种图元类型,用于构成任意复杂程度的,由点、线以及多边形面片组成的物体。 根据上面所述的内容就可以轻松的画出你想要的基本图元形状,在OSG中,为了简化场景的绘制,同时也为了方便开发者能够快速地构造一个场景,它本身预定义了一些常用的几何体,而要使用这些预定义的几何体,通常要用到osg:shape类、osg:ShapeDrawable类和网络化类。osg:Shape类直接继承自osg:Object基类,继承关系如图5-1所示。osg:Shape类是各种内嵌几何体的基类,它不但可用于剔除和碰撞检测,还可用于生成预定义的几何体对象。常用的内嵌几何体包括osg:Box(正方体), osg:Capsule(太空舱),osg:Cone(椎体),osg:Cylinder(柱体),osg:HeightField(高度图),osg:InfinitePlane(无限平面),osg:Sphere(球体),osg:TriangleMesh(三角片)。刚刚我们讲到OSG中内嵌了很多预定义的几何体,如果渲染这些内嵌几何体,就必须将其与osg:Drawable关联,而实际应用中,可以使用osg:Drawable类的派生类osg:ShapeDrawable来完成这个功能。osg:ShapeDrawable关系继承如图5-2所示。在osg:ShapeDrawable类的构造函数中提供了关联osg:Shape的方法:ShapeDrawable(Shape* shape,TessellationHints *hints=0)/第一个参数为shape,第二个参数默认下不细化同时,由于它继承自osg:Drawable类,所以它的实例需要被添加到叶节点中才能被实例绘制。网络化类(osg:TessellationHints)直接继承自osg:Object基类,继承关系如图5-3所示osg:TessellationHints类的主要作用是设置预定义几何体对象的精细程度,精细程度越高,表示其细分越详细,但对于不同的预定义几何体对象它的作用是不一样的,例如:Box(四棱柱):网络化类对于四棱柱没有意义;Capsule(太空舱):太空舱分3个部分,上下半球部分和圆柱侧面部分,默认圆柱侧面被细分;Cone(圆锥):直接细分;Cylinder(柱体):直接细分;Sphere(球):直接细分。目前,osg:TessellationHints类并不完整,部分类成员函数还没有实现,具体可以参看源码。在内嵌几何体对象中,默认的情况下,网格化类的精细度为0,表示预定义的几何体此时按照原顶点默认绘制,不做任何细化处理。图5-1 osg:Shape的继承关系图图5-2 osg:ShapeDrawable的继承关系图图5-3 osg:TessellationHints的继承关系图5.1.2 设置图元纹理物体的纹理是可以根据用户十点的远近来自动调整和变化的,即纹理图像的细节层次;并且当纹理无法完全覆盖几何体的每一个顶点时,通过边界截取方式的调整,可以重复映射同一块纹理,或者将边界颜色应用到未覆盖的物体表面上。OSG使用派生自StateAttribute的Texture类来定义一个纹理对象,其6个子类对象Texture1D、Texture2D、Texture2DArray、Texture3D、TextureCubeMap和TextureRectan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论