




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河南师范大学本科毕业论文河南师范大学本科毕业论文 学号:图形建模与虚拟现实技术在仿真中的应用研究学院名称: 计算机与信息技术学院 专业名称: 计算机科学与技术 年级班别: 姓 名: 指导教师: 2009 年05月24 河南师范大学本科毕业论文图形建模与虚拟现实技术在仿真中的应用研究摘 要 本文对虚拟现实技术如何应用于系统仿真进行了深入的研究,分析了虚拟现实技术应用于系统仿真的适用性与局限性,提出了将图形建模技术作为其应用于系统仿真的切入点与结合点,阐述了将虚拟现实技术与图形建模技术结合应用于仿真过程所涉及的理论基础及关键技术,并对它们在过程工业系统仿真中的应用作了大胆的尝试。本文的研究在图形建模系统的基础上,将虚拟现实技术有机地结合进来,进一步实现了基于虚拟现实建模语言vrml的虚拟仿真场景展示系统。文中详细描述了图形建模系统与虚拟仿真场景展示系统的体系结构与功能模块,并深入论述了系统开发过程中涉及的技术难点及解决方案。关键词 仿真;虚拟现实;虚拟仿真;图形建模;虚拟现实建模语言application of virtual reality and graphic modeling technology in system simulationabstract how to apply virtual reality technology to system simulation has been studied thoroughly in this paper.the applicability and limitation of applying virtual reality to system simulation has been analyzed.and graphic modeling technology has been proposed as the medium of this application.the theory foundation and key technology of combining virtual reality technology and graphic modeling technology and applying them to system simulation has been discussed in this paper.the developed system has been applied to process industry system simulation.virtual simulation system based on vrml has been implemented.in this paper,the architecture and function modules are introduced in detail,and the difficulties and solutions in the process of developing the systems are also been discussed thoroughly. key words simulation;virtual reality; virtual simulation; virtual reality modeling language前 言图形建模的大致思想就是利用图标代表现实中的物理设备,图标与算法库中的算法建立起对应关系,建模时在前台的图形环境中利用图标调用方式完成对后台算法库中算法的调用,用联线关联任意两个相关的图标,表示物流的方向,从而构成过程流程仿真的框架。利用图形建模技术,不仅可以直观地描述系统中各对象之间复杂的逻辑关系,简化建模过程,而且为仿真建模中的信息可视化获取以及表达提供了便捷的途径。虚拟现实是一门集成了人与信息的科学,其核心是由计算机生成的三维交互式虚拟环境。其本质是运用计算机对现实或虚构的世界进行全面的仿真,从而生成一个逼真的融合了三维视觉、听觉、触觉甚至嗅觉的感觉世界,让用户可以从自己的视点出发,利用自然的技能,通过某些设备对这一生成的虚拟世界客体进行浏览和交互考察。虚拟现实技术是一项综合的技术,涉及计算机图形技术、人机接口技术、多媒体技术、传感技术、高度并行的实时计算技术、立体视觉以及人工智能等多方面的新技术。系统仿真是建立相应物理系统的数学模型在计算机上进行解算的过程4。从技术应用角度看,系统仿真技术是以相似原理、系统技术、控制理论、计算机技术、信息技术及其应用领域相关的专业技术为基础,以计算机和各种物理效应设备为工具,利用数学模型或部分实物对具有不确定性因素的现实系统或假想系统进行动态实验研究的一门综合性技术。虚拟现实和系统仿真之间的交集所构成的“虚拟现实仿真系统13”在内容、理论和方法上都有新的特点和亮点,它综合了虚拟现实和系统仿真各自的优点和长处。把虚拟现实与系统仿真有机的结合起来,可以形成一种虚拟现实仿真系统,将两类系统的特点结合成为一个有机体,使用户可以在一个虚拟空间中将个人的偏好和独立行为融合到虚拟现实仿真过程中去。1 虚拟现实与图形建模在仿真中的应用分析1.1 虚拟现实技术的适用性虚拟现实技术具有实时的三维空间表现能力,能够实现以人为中心的人-机交互方式。从理论上讲,把虚拟现实技术与仿真技术结合起来就可以得到一个虚拟现实仿真系统。但这种结合并不是简单的相加,而是融合了两种类型系统的特点的有机体。虚拟现实系统是基于仿真的,对于虚拟现实系统来说,其核心是仿真引擎。虚拟现实系统依赖仿真引擎来推动虚拟世界中时间的流逝,处理交互事件、对象的行为、模拟自然规律并决定虚拟世界的状态。而对于系统仿真来说,无论是对真实世界还是虚构世界的仿真,都可以利用虚拟现实技术作为仿真模型以及仿真结果数据的三维表现形式,实现仿真系统中的高级人-机界面。1.2 虚拟现实技术的局限性虚拟现实技术的应用确实可以带来很多好处,尤其是虚拟现实系统带来的沉浸感和交互性使用户可以在虚拟世界中自由的移动和浏览;可以控制虚拟世界中的物体从而影响虚拟世界的状态;能够直接观察到问题并着手解决等。但虚拟现实技术并不能解决所有问题,并不能代替仿真过程中的所有方法与手段。所以,虚拟现实技术在具有强大优势的同时,也具有其局限性。虚拟现实系统不适用于宏观决策问题,主要原因在于宏观问题不易建立三维模型,而且宏观决策关注的不是感觉上的直观与细节问题。虚拟现实需要与其它类型的表现形式加以配合,才能发挥出最佳的效果。1.3 虚拟现实与图形建模的结合机制实际系统往往都是宏观、微观决策相混杂的,有时候不易区分,而且宏观、微观问题有些情况下也是可以相互转化的。虚拟现实在仿真系统中主要是以表现和参与为目的的。对于仿真建模阶段,采用图形建模方式,而在仿真模型的展示阶段,则采用虚拟现实技术。将两者有机的结合起来,达到了很好的应用效果5。当然,这两者在仿真中的应用并不是相互孤立的,它们之间是相互联系,并存在数据依赖关系的。2 图形建模虚拟仿真系统的设计方案与技术基础2.1 项目背景基于前面基础理论的研究,本课题的一部分实践工作集中于开发图形建模系统;开发此项目的目的就是彻底改变原有的建模方式,为用户提供一个直观、友好的图形化建模环境,提高建模的速度和质量,适应市场的需求,跟上软件发展的流行趋势。其中图形建模系统为用户提供一个界面友好、功能齐全、操作简便的图形化建模环境;虚拟仿真场景展示系统为用户展示目标系统的具有动态性和交互性的三维虚拟场景模型,使用户对目标系统有更加直观感性的认识和更深层次的理解。2.2 系统设计的总体结构如图2.1所示为图形建模虚拟场景展示系统的总体结构。图标编辑工具图标管理工具建模环境模型管理工具图标库算法库模型库三维属性数据库仿真数据库二维仿真模型三维虚拟设备库三维虚拟场景 图2.1 图形建模虚拟场景展示系统的总体结构(1)图标编辑工具:提供了直线、矩形、圆角矩形、椭圆、扇形、弦形、多边形等基本的图元工具,利用图形元素组合渲染成代表流程中实际设备的图标;(2)图标库:把利用图元构建的各种类型的图标集中管理起来,形成图标库;(3)图标管理工具:系统提供一个树型的图标管理工具,用户可以利用它把图标按照不同的种类组织管理起来;(4)算法库:存储表征了设备行为特性的各种工艺算法;(5)模型库:存储用户在建模环境中搭建的仿真模型;(6)建模环境:根据用户当前要做的工作为用户提供不同类型的工作环境,不同的工作环境将与不同的管理工具和数据库相关联;(7)模型管理工具:为用户提供一个树状结构的模型管理工具,便于对模型的选择和操作,以及与模型服务器的连接等;(8)二维仿真模型:用户在建模环境中,利用设备图标搭建目标系统的仿真模型,并设置设备单元与算法库中相应算法之间的绑定关系,以及各个设备单元之间的连接关系;(9)三维属性数据库:将用户在图形建模过程中设定,或在图形建模画布中自动取得的三维属性信息,以及其他描述信息,记录在三维属性数据库中,以便生成三维虚拟仿真场景时获取相应信息;(10)仿真数据库:在运行仿真模型时,与仿真数据库进行交互,将模型运行的实时数据写入数据库,可以对这些数据进行图形化的显示,供用户对仿真过程进行分析;(11)三维虚拟设备库:存储了直接利用vrml语言编写的,或者利用3ds max制作并导出的基于vrml的虚拟设备模型;(12)三维虚拟场景:根据图形仿真模型以及其他必要的数据,生成的基于vrml的动态的、交互性的虚拟仿真场景。2.3 系统开发的技术基础系统的开发工作是在windows 2000操作系统下的visual c+集成开发环境中完成的。在开发的过程中采用了先进的面向对象技术、mvc设计模式、mfc应用框架,以及activex控件技术。2.3.1 面向对象技术面向对象程序设计技术的提出,主要是为了解决传统程序设计方法15结构化程序设计所不能解决的代码重用问题。面向对象的编程方法具有四个基本特征:(1)抽象:抽象包括两个方面,一是过程抽象,二是数据抽象。过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个的实体看待。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。(2)封装:即现实世界可以被描绘成一系列完全自治、独立的对象,把对象的过程和数据包装起来,通过一个接口与外部进行交互,因此封装使得对象的内部实现与外部接口分离开来。(3)继承:继承指一种类型的对象继承了另一种对象的特性。在面向对象程序设计中,继承是一种类的层次模型,是指一个子类继承父类的特征。(4)多态:主要是指变量多态和方法多态,变量多态是指同一个变量在运行时刻标识不同类型的对象,而方法多态主要是指同一个方法做不一样的动作。总之,面向对象程序设计具有许多优点。由于面向对象编程的可重用性,可以在应用程序中大量采用成熟的类库,从而缩短了开发时间,提高了开发效率,并且所开发的程序可靠性更高、更强壮。2.3.2 mvc设计模式mvc(model-view-controller)是一种交互界面的结构组织模式。mvc把交互系统的组成分解成模型(model)、视图(view)、控制器(controller)三种部件。模型是软件所处理的问题逻辑在独立于外在显示内容和形式下的内在抽象,它封装了问题的核心数据、逻辑功能的计算关系,提供了完成问题处理的操作过程。视图把表示模型数据及其逻辑关系和状态的信息以特定的形式展示给用户。它从模型获得显示信息,并通过特定的显示形式,把信息转达给用户。控制器是处理用户与软件的交互操作的,其职责是控制导致模型中任何变化的传播,确保用户界面与模型间的对应联系。它接受用户的输入,将输入反馈给模型,进而实现对模型的计算控制。模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其它依赖于这些数据的视图都相应地反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。2.3.3 mfc程序设计框架mfc2.0是一种新的应用程序结构mfc文档/视图结构。在这种结构中,框架类繁重的任务被委派给几个不同的类,实现了数据存储和显示的分离6。一般情况下,采用文档/视结构的应用程序至少应由以下对象组成:(1)应用程序是一个cwinapp派生对象,它充当全部应用程序的容器。(2)框架窗口是一cfrmewnd派生对象,充当试图的容器。(3)文档是一个cdocument派生对象,它存储应用程序的数据,并把这些信息提供给应用程序的其余部分。(4)视窗是cview派生对象,它与其父框架窗口用户区对齐。视窗接受用户对应用程序的输入并显示与其相关联的文档数据。2.3.4 activex控件技术activex是对广泛使用的ole控件技术的更新和升级,是对ole控件技术的更名和重构。activex依赖于com技术,其实质是遵从一定的标准、与客户端交互的com对象。对象链接与嵌入(ole)用于在不同的应用之间,甚至在多种类型信息之间进行集成,以实现高度的应用兼容性。ole技术基于com,并且考虑到了可重用的、即插即用对象的开发并且这些对象在多个应用之间是可以相互操作的。ole还规定了可重用的、基于组件的软件开发规范,使得在这样的软件开发中,任何软件供应商都能以任何语言编写软件组件。基于组件的应用开发,其方法和组装电脑一样,可以用已制作好的组件部件来构筑应用。组件对象模型(com)提供了接口和内部组件通信的标准。通过com,一个实际应用可以采用其他任何一个应用对象或操作系统的特征,或允许软件组件的升级而不对整个系统的运行造成影响。2.4 虚拟现实建模语言vrml2.4.1 vrml内容简介vrml(virtual reality modeling language)技术规范是一种网络环境下描述虚拟三维模型、渲染以及提供交互操作的跨平台、开放式、解释性文本语言。一个vrml文件主要组成部分包括:vrml文件头、原型、造型节点和脚本、路由。文件头部分来告诉浏览器,该vrml文件符合的规范标准以及使用的字符集等信息。原型定义创建了带有指定名称、接口和整体的新节点类型。造型节点是vrml中的基本构造模块,正是由于造型节点的定义而产生了虚拟的vrml空间以及其中的虚拟物体。脚本是一套程序,通常作为一个事件级联的一部分而执行。路由是一种文本描述的消息,一旦在两个节点之间创建了一个路由,第一个节点可以顺着路由传递消息给第二个节点,这样的消息被称为事件。2.4.2 vrml的工作原理与特性vrml的基本工作原理可概括为:文本描述、远程传输、本地计算生成。文本描述:vrml用类似html标记文本语言来描述三维场景。远程传输:是指用户浏览vrml描述的虚拟场景时,需要通过internet将描述场景的文本从服务器传送到本地,由本地的浏览器解释vrml代码,并显示出三维虚拟场景。本地计算生成:是指描述虚拟场景的数据传送到本地后,浏览器对它进行解释计算,动态生成虚拟场景。vrml的基本特性可以概括为:统分结合、基于ascii码的低带宽可行性、实时3d着色引擎和它的可扩充性。统分结合模式:vrml的访问方式基于c/s模式,其中服务器提供vrml文件,客户通过网络下载希望访问的文件,并通过本地平台的浏览器(viewer)对该文件描述的vr世界进行访问。可扩充性:vrml作为一种标准,不可能满足所有应用的需要。因而vrml是可扩充的,即可以根据需要定义自己的对象及其属性,并通过java语言等方式使浏览器可以解释这种对象及其行为。3 图形建模系统的技术实现3.1 图形建模系统功能简介图形建模系统主要包括三方面的功能7:图形化定义设备和系统;仿真过程的图形交互操作;模型数据的图形化动态显示。图形建模系统的功能结构如图3.1所示。图形建模系统图形定义系 统设备库管理资源库管理设备连接系统其 他图3.1 图形建模系统结构图(1)图形定义系统:提供各种基本的绘图工具,如矩形、圆角矩形、椭圆、直线、箭头、多边形、贝塞尔曲线等,供建模人员定义设备图标时使用;(2)设备库管理:将利用图形定义系统建立的各种设备图标集中管理起来,方便用户的访问与使用;(3)资源库管理:协调管理各种资源,包括图形资源与图标资源;(4)设备连接系统:负责处理建模过程中设备图标之间的连接,实现连接线路的拓扑分析与形状自适应等功能;(5)其他:包括对于图形的渲染、缩放、旋转、镜像、层次调整,图片的引入及操作等辅助功能。3.2 图形建模系统的框架类结构图形建模系统采用mvc设计模式的文档/视图结构,并在mfc类库的基础上形成应用程序框架,系统框架的类结构及相互关系如图3.2所示。cgengineerappcmultidoctemplatecgengineerdoccmdichildwndcmdiframewndcgengineerview图3.2 系统框架的类结构及相互关系(1)应用程序类cgengineerapp(cwinapp的派生类)保留并维护了一份所有文档模板的指针列表,这是一个链表结构。应用程序为所要支持的每个文档类型动态分配一个cmultidoctemplate对象,函数原型为:cmultidoctemplate(uintnidresource,cruntimeclass*pdocclass,cruntimeclass*pframeclass,cruntimeclass*pviewclass);并在应用程序类的cwinapp:initinstance成员函数中将每个cmultidoctemplate对象传递给cwinapp:adddoctemplate。该函数将一个文档模板加入到应用程序可用文档模板的列表中。函数原形为:void adddoctemplate(cdoctemplate*ptemplate);应用程序可以利用cwinapp:getfirstdoctemplatepostion函数获得应用程序注册的第一个文档模板的位置,利用该值来cwinapp:getnextdoctemplate函数,获得第一个cdoctemplate对象指针。函数原形为:position getfirstdoctemplate()const;cdoctemplate*getnextdoctemplate(position&pos)const;第二个函数返回由pos标识的文档模板。position是mfc定义的一个用于迭代对象指针检索的值。通过这两个函数,应用程序可以遍历整个文档模板列表。如果被检索的文档模板是模板列表中的最后一个,则pos参数被置为null。在应用程序的任何地方,程序员都可以调用afxgetapp()函数获得应用程序的对象指针。(2)一个文档模板可以有多个文档,每个文档模板都保留并维护了一个对应所有文档的指针列表,可以利用cdoctemplate:getfirstdocposition函数获得与文档模板相关的文档集合中第一个文档的位置,并用position值作为cdoctemplate:getnextdoc的参数来重复遍历与模板相关的文档列表。函数原形为:position getfirstdocposition()const=0;cdocument*getnextdoc(position&rpos)const=0;如果列表为空,则rpos被置为null。(3)在文档中可以调用cdocument:getdoctemplate获得指向该文档模板的指针。函数原形为:cdoctemplate*getdoctemplate()const如果该文档不属于文档模板管理,则返回值为null。(4)一个文档(cgegineerdoc类的实例对象)可以有多个视图(cgegineerview类的实例对象)。每一个文档都保留并维护一个所有与之相关的视图的列表。cdocument:addview将一个视图连接到文档上,将该视图加入到与文档相关联的视图的列表中,并将视图的文档指针指向该文档。当执行系统中的file/new、file/open命令时,系统将一个新创建的视图对象连接到文档上,mfc会自动调用该函数,框架通过文档/视图结构将文档和视图关联起来。应用程序可以调用cdocument:getfirstviewposition返回与该文档相关联的视图列表中第一个视图的位置,并调用cdocument:getnextview返回指定位置的视图,并将rpositon的值设置为列表中下一个视图的position值。如果找到的视图为列表中的最后一个,则将rposition置为null。函数原型为:virtual position getfirstviewposition()const;virtual cviw*getnextview(position&rposition)cosnt;当在文档上新增或删除一个视图时,mfc会调用onchangeviewlist函数。如果被删除的视图是该文档的最后一个视图,则删除该文档。(5)一个视图只能对应一个文档。在视图中,调用cview:getdocument可以获得一个指向该视图的文档的指针。函数原形为:cdocument*getdocument()const;如果该视图不与任何文档相,则返回null.(6)mdi框架窗口通过调用cframewnd:getactivedocument可以获得与当前活动的视图相关联的cdocument指针。函数原形为:virtual cdocument*getactivedocument();(7)通过调用cframewnd:getactiveview可以获得指向与cframewnd框架窗口连接的活动视图的指针,如果是被cmdiframewnd框架窗口调用,则返回null。mdi框架窗口可以首先调用mdigetactive找到活动的mdi子窗口,然后找到对应于子窗口的活动视图。函数原形为:virtual cdocument*getactivedocument();(8)mdi框架窗口通过调用cframewnd:getactiveframe,可以获得一个指向mdi框架窗口的活动多文档界面子窗口的指针。(9)cmdichildwnd调用getmdiframe获得mdi框架窗口(cmdiframewnd)。(10)cwinapp调用afxgetmainwnd得到指向应用程序的活动主窗口的指针。下面一段代码说明了如何利用cdoctemplate、cdocument和cview之间的存取关系,遍历整个文档模板、文档以及视图。cmyapp*pmyapp=(cmyapp*)afxgetapp();position p=pmyapp-getfirstdoctemplateposition();while(p!=null)cdoctemplate*pdoctemplate=pmyapp-getnextdoctemplate(p);position p1=pdoctemplate-getfirstdocposition();while(p1!=null)cdocument*pdocument=pdoctemplate-getnextdoc(p1);position p2=pdocument-getfirstviewposition();while(p2!=null)cview*pview=pdocument-getnextview(p2);在mfc程序设计中,利用文档类来保存系统的数据。遵循这个原则,本系统中在cgengineerdoc文档类中存储并维护一个图形对象链表。当用户在工作区建立图标或者搭建仿真模型时,每当在工作区中画入一个图元或图标(图标由基本图元或其他的图标构成),都会将其加入到图形对象链表中来。图形对象链表的定义如下:typedef ctypedptrlistcdrawobjlist;cdrawobjlist*m_pobjects;视图是对文档中存储的数据的一种直观表现,利用cgengineerview类中的ondraw(cdc*pdc)函数,能把文档中存储的图形对象列表中的所有图形对象绘制在用户工作区中。3.3 图形建模的技术难点实现在开发图形建模系统的过程中,不可避免的遇到了很多难点问题,这里选择了几个具有代表性的难点解决方案,这些方案并不见得是最佳的解决方案,但经过作者的验证都取得了令人满意的效果。3.3.1 连接线形状自适应功能的实现在进行图形建模的时候,图标之间的搭接是构建仿真模型过程中非常重要的一个步骤。利用连接线工具对工作区中的图标进行搭接时,如果连接线的形状能够自适应,将会给用户带来很大的方便。连接线形状自适应即是根据两个图标的相对位置以及图标中连接点的相对位置自动调整自身的形状,自动绕开所连接的两个图标,而不会压在图标上面。当然用户在需要的时候还可以任意调整连接线的形状。解决这个问题时,根据连接点在图标外围矩形中的相对位置,以及连接线两端的起始连接点和终止连接点的相对位置,对它们进行判断处理,在需要的时候要增加新的转折点,重新计算折线中转折点的位置,并重新绘制连接线。为此,定义了枚举类型:enum locationclosetoleft,closetoright,closetotop,closetobottom,atcenter,none,并在连接线类clinkline中定义了两个成员变量,来标志连接点在图标中的相对位置:locationinfo m_startlocationinfo;locationinfo m_endlocationinfo;连接线除了可以自动调整自身的形状以外,用户还可以手动的调整它的形状,并且可以根据需要增加连接线中的转折点。这些对于连接线形状的调整功能都是由clinkline类中的adjustlinkline函数完成的,该函数的定义如下:void clinkline:adjustlinkline(cgengineerview*pview)另外还有一些相关的函数,如函数addoneturning()以及函数addturningpoint()负责增加连接线的转折点,重新分配存储空间,并调整各个转折点在数组中的位置,函数delturningpoint()负责当用户把两个转折点调整到同一位置的时候,需要将它们合并为一个转折点。以上函数的定义如下。void clinkline:addoneturning(int i);void clinkline:addturningpoint(int i);void clinkline:delturningpoint(int i);3.3.2 图标嵌套的实现前面已经介绍过,代表设备单元的图标是由一些基本的图元或者其他图标组合而成的。当一个图标当中包含其它图标的时候,就产生了图标之间的嵌套关系。虽然图标可能具有嵌套关系,但是一层一层的追根到底,处于最内层的图标最终还是由基本的图元构成的。但是这里有一个主要问题是,无论是嵌套在哪一级的图标,构成它的图元(包含在cdrawunit:cdrawobjlist m_lstdsp链表中)中记录的自身的位置与大小等信息(记录在cdrawobj:m_position变量中)都是在最早绘制该图元的窗口中的数据信息,即是在利用该图元建立图标时的那个窗口中的数据信息。如果仍然利用这个信息来绘制被嵌套在内部的图标的话,必然会出现混乱。对该问题的解决方法是:构造一个函数,用于计算图标中包围所有图形对象的外围矩形,如(a)图中的虚线框所示为图标1的外围矩形,(b)图中的虚线框所示为图标1的外围矩形。在绘制图标2时,分别计算出图标1和图标1的外围矩形。根据两个不同的外围矩形计算出图标1到图标1的缩放比例和偏移量,然后重新计算图标1中的各个图元在图标2中的正确位置。这也就是为什么图标类cdrawunit中会声明如下的成员变量:float m_scalex;/记录图标在x方向的缩放比例float m_scaley;/记录图标在y方向的缩放比例int m_offsetx;/记录图标在x方向的偏移量int m_offsety;/记录图标在y方向的偏移量3.3.3 图形渲染效果的实现可以对图形对象设置边框颜色,边框线形,填充颜色等常见的属性。除了这些常规的属性外,还可以设置其渲染效果,利用颜色渐变产生的光影作用,可以使图标具有一种三维立体的视觉效果,从而更加形象和美观。如图3.3所示,分别为利用本系统制作的没有设置渲染效果和设置了渲染效果的图标。显而易见,设置了渲染效果的图标要比没有设置渲染效果的图标更加美观。 图3.3 (a)没有设置渲染效果 (b)设置了渲染效果设置渲染效果时,用户在属性对话框中选择渲染的起始颜色与终止颜色,并要选择渲染的方式,如颜色是从上到下渐变,或是从两边向中间渐变。最后根据用户的设定,调用相应的函数来进行处理。进行渲染的基本原理是:根据用户设定的终止颜色与起始颜色的差值,以及需要渲染的区域的范围,计算出平均每个单位区域颜色的变化值,然后从渲染区域的起始位置开始循环,每向终止位置的方向增加一个单位区域,则用上一个单位区域的填充颜色值加上前面计算出来的颜色变化值,得到新的填充颜色值来填充现在这个单位区域。则最终就可以得到具有立体感的渲染效果。例如,颜色由一侧向另一侧渐变的处理函数为:void shineoneedge(cdc*pdc,crect&objrect,const bool bfromsmall,const colorref startclr,const colorref endclr,const bool bhorizontal,cdrawrect:shape shapeflag,cpoint roundness);在shineoneedge函数的形参中crect&objrect表示所渲染的图形对象所在的矩形区域;const bool bfromsmall标志是从坐标小的一侧向坐标大的一侧进行颜色渐变,还是反过来进行;const colorref startclr表示渐变的起始颜色;constcolorref endclr表示渐变的终止颜色;const bool bhorizontal表示是水平方向渐变还是垂直方向渐变;cdrawrect:shape shapeflag表示图形对象具体是哪一种形状(如矩形、圆角矩形、椭圆等),对于多边形等特殊的形状另外有其他的渲染函数进行处理;如果渲染的是圆角矩形,则用cpoint roundness参数记录圆角的程度。此外,用户还可以利用一个控制点来调整“渲染点”的位置,从而实现不对称的渲染效果,处理函数为:void shineposition(cdc*pdc,crect&objrect,double percent,const colorref startclr,const colorref endclr,const bool bhorizontal,cdrawrect:shape shapeflag,cpoint roundness);3.3.4 undo/redo的实现用户在工作的时候,难免会有一些误操作,如果能够提供undo/redo的功能,将给用户带来很大的方便。然而实现undo/redo功能一直是开发各种软件工具的难点问题。在本系统中解决这个问题的基本原理为:首先,在文档类cgengineerdoc中定义了一个undo对象链表,定义如下:cundolist m_undolist;当用户要对图形对象进行操作的时候,先将操作前的对象复制一份(利用每个类中的duplicate()函数)添加到undo链表中,这样就可以记录下操作前的对象,当用户执行undo操作时,取得undo链表中的最后一个对象,替换掉文档类中的对象链表cgengineerdoc:m_objects中的相应位置的对象。如下所示为相关类的定义:class cundoobj:public cdrawobjpublic:cdrawobj*m_pundoobj;int m_objindex;bool m_binsertafter;public:cundoobj();cundoobj();typedef ctypedptrlistcundoobjlist;class cundonode:public cdrawobjpublic:cundoobjlist m_lstundoobj;actiontype m_actiontype;public:cundonode();cundonode();void addundoobj(cundoobj*pundoobj);typedef ctypedptrlistcundolist;4 虚拟仿真场景展示系统的技术实现当用户在图形建模系统中搭建了系统的图形化仿真模型以后,可以利用虚拟仿真场景展示系统生成对应于该仿真模型的基于vrml的三维虚拟仿真场景。在生成该虚拟场景的过程中主要涉及到了vrml中的各种造型节点、传感器节点以及其他一些具有特殊功能的节点。这个虚拟场景不仅可以使用户浏览目标系统的“真实面貌”,而且虚拟场景中的虚拟对象还可以根据仿真模型的运行数据,实时调整自身的状态,以便反映真实系统中设备状态的动态变化。4.1 构建基于vrml的虚拟仿真场景的基本原理利用图形建模工具建立了目标系统的仿真模型以后,用户可以根据需要生成该系统的虚拟仿真场景模型。当搭建完二维仿真模型后,根据图形仿真模型中的二维图标,调用三维虚拟设备模型库中的相应的三维模型组织成一个场景。简单地说,就是各个虚拟设备模型通过vrml中的transform节点确定各自在场景中的空间位置而组织形成一个虚拟仿真场景。用户在搭建图形仿真模型时,定义每一个图标转换到三维场景中的空间位置,作为该图标的空间属性存储到一个空间位置数据表中。在将三维模型引入场景时,从该表中读取其空间信息,从而控制三维模型在场景中的位置。4.2 制作基于vrml的虚拟设备仿真目标系统的虚拟现实场景是由构成该系统的各种设备的虚拟造型节点组织而成的。所以要构建基于vrml的三维虚拟仿真场景10,首先就需要与物理设备相对应的虚拟设备。对于造型比较简单的虚拟设备,可以直接编写vrml文件,构成虚拟设备。对于造型比较复杂的三维虚拟设备,可以利用三维建模软件3ds max来建立虚拟设备模型,然后导出生成vrml格式的文件(后缀为.wrl)。4.2.1 直接利用vrml编制虚拟设备vrml提供了几种能直接用来创建虚拟场景的标准造型,包括自然界中最基本的几何造型,如正方体、球体、圆锥体、圆柱体等。这些几何造型由其自身的几何尺寸和外观共同控制,这两方面结合起来就是shape节点。在vrml空间中,每一个造型都有其空间坐标,通过修改空间坐标可以控制该造型物体在vrml空间中移动、旋转等。使用transform节点可以确定造型的空间坐标系,同样也可以使用transform节点使造型进行移动、旋转及缩放。4.2.2 利用3ds max制作虚拟设备与vrml语言复杂的指令相比,3ds max则是一种快捷直观的建模方法,不但可以利用3ds max制作三维模型,并直接导出成vrml格式的文件,而且还能够在3ds max中插入vrml节点,并且将这些节点和空间造型组合起来,设置各项参数。利用3ds max制作三维虚拟设备模型的大体步骤如下:(1)建立模型:打开3ds max创建一个新的模型,3ds max提供了多变性建模、放样、表面建模工具、nurbs等方便有效的建模手段,利用3dsmax提供的各种方便、快捷、高效的建模方式与工具建立虚拟设备模型;(2)设定材质、贴图或动画:设定虚拟设备的材质、贴图,如果需要还可以设定动画;(3)建立视点:由于3ds max与vrml的建模单位并不匹配,如果把没有摄像机的3ds max场景直接导出到vrml,往往无法获得正确的视点。(4)从3ds max导出到vrml:制作好三维虚拟设备以后,选择3ds max环境中的file|export导出菜单选项,在弹出的对话框中选择导出的文件类型为.wrl,输入文件名,然后单击保存按钮。在弹出的exporter对话框中设置相应的参数,单击ok按钮确定后,系统即可将当前3ds max制作的三维模型导出成vrml格式。如果需要浏览生成的场景或者三维模型,可以在浏览器中打开相应的.wrl文件。4.3 利用cortona控件实现场景的显示与控制4.3.1 cortona控件介绍cortona控件是parallelgraphic公司发布的低价高效、功能强大的activex控件。同时它本身也是vrml专用的浏览器。cortona组件支持真正的对象链接和嵌入(ole),除了可以嵌入到html中与javascript协同开发web3d的应用程序当中16,用户还可以方便地将cortona集成到标准可视化编程工具之中,如visual c+、visual basic、delphi等。4.4 虚拟仿真场景的动态性与交互性的实现虚拟现实技术的目的就是要给用户一种直观的、逼真的、身临其境的感受,虚拟仿真场景必须具有能够反映其所表征的现实中的目标系统的动态特性与交互特性。虚拟仿真场景与人的动态交互可以利用vrml中的各种传感器来完成9,传感器节点在基于vrml的虚拟仿真场景中起着非常重要的作用。4.4.1 利用时间传感器节点控制仿真动画利用时间传感器节点(timesenso)来驱动连续的仿真动画和数据刷新。timesensor节点是一个时钟,它可以随着时间的流逝而产生相关的时间事件,可以利用这些事件来控制一些与时间相关的行为。timesensor节点的语法如下:timesensoreventout sfbool isactiveeventout sftime timeeventout sftime cycletimeeventout sffloat fraction_changedexposedfield sftime cycleinterval 1.0exposedfield sfbool enabled trueexposedfield sftime starttime 0exposedfield sftime stoptime 0exposedfield sfbool loop false当timesensor处于开启状态(enabled=true),并且时间到了starttime域指定的值时,它就开始产生事件,并连续不断的输出“事件时间”。可以利用cycinterval域来控制timesensor产生事件的时间间隔。当到了stoptime域指定的时间,timesensor就会停止产生事件。当timesensor节点处于活动状态时,它会产生isactive=true事件并开始产生time,fraction_changed以及cycletime事件,这些事件可以路由到其他节点来驱动动画或者仿真行为,在本系统中,利用timesensor节点以固定周期驱动script节点中的相关程序从仿真数据库中读取设备的实时状态。4.4.2 利用可见性传感器控制虚拟场景的刷新可见性传感器节点(visibilitysensor)用来探测在一个虚拟盒子中的可见性的变化。当可见性状态发生变化时就产生事件。visibilitysensor节点的语法如下:visibilitysensoreventout sfbool isactiveeventout sftime entertimeeventout sftime exittimeexposedfield sfbool enabled trueexposedfield sfvec3f center 0.0 0.0 0.0exposedfield sfvec3f size 0.0 0.0 0.0当用户浏览虚拟仿真场景时,他有可能在某一时刻只是集中在虚拟场景的某一个局部,这时他的可见视野是有限的。这种情况下,就没有必要让所有的虚拟设备都实时的刷新自己的状态,因为状态的刷新涉及到与外界数据源的通信,以及对相应虚拟设备的状态控制,是比较消耗资源的14。因此,在本系统的虚拟仿真场景中利用可见性传感器节点(visibilitysensor)来控制是否启动时间传感器节点,当虚拟设备可见时,则启动timesensor节点来控制虚拟设备状态的实时刷新。4.4.3 利用触摸传感器节点感受用户的动作触摸传感器节点(touchsensor)提供了一种用户与vrml世界交互的手段。可以利用它来感知用户的鼠标在组内节点上的移动或者单击动作。在仿真系统中可以在虚拟设备的组节点中定义触摸传感器节点来控制系统的开关量。touchsensor节点的语法如下:touchsensoreventout sfbool isovereventout sfvec3f hitpoint_changedeventout sfvec3f hitnormal_changedeventout sfvec3f hittexcoord_changedeventout sfbool isactiveeventout sftime touchtimeexposedfield sfbool true当用户在某个虚拟设备上按下鼠标键后,touchsensor将产生isactive事件,并返回true。当用户松开鼠标键后,产生isactive事件,返回false,同时产生事件touchtime,来表识点击鼠标的时间。4.4.4 利用拖动传感器节点实现对虚拟设备位置的控制前面的小节已经介绍过,当用户建立好图形仿真模型后,系统会根据其中的设备图标,在三维虚拟设备库中找到与之相对应的虚拟设备,并根据空间数据库中存储的各个虚拟设备的三维空间位置8,来生成相应的三维虚拟场景。三维空间数据库中存储的空间位置默认为图形建模环境中的二维平面位置(垂直坐标默认为零),虽然用户可以在建模过程中另行定义,但是用户仍有可能对于生成的虚拟场景中虚拟设备的空间位置布局并不满意。这时,本系统允许用户在虚拟场景中对虚拟设备的位置进行调整。在虚拟场景中对虚拟物体位置的调整,要用到vrml中的拖动传感器节点。拖动传感器节点不仅能够跟踪用户的动作,同时还能移动与传感器同组的那些对象。有三种类型的拖动传感器节点:(1)平面传感器(planesensor):允许用户沿xy平面移动对象。(2)柱面传感器(cylindersensor):将运动映射到一个虚拟的柱面上去。(3)球面传感器(shperesensor):将运动映射到一个虚拟的球面上去。其中planesensor节点的语法如下:planesensoreventout sfbool isactiveeventout sfvec3f trackpoint_changedeventout sfvec3f translateon_changedexposedfield enabled trueexposedfield sfvec3f offset 0 0 0exposedfield sfbool autooffset trueexposedfield sfvec2f maxposition11exposedfield sfvec2f minposition 0 0planesensor节点将鼠标的运动映射到xy平面上,即在本地坐标系中沿xy平面移动对象。4.5 虚拟仿真场景展示系统在其他方面的应用虚拟仿真场景展示系统除了可以用于系统仿真,展示目标系统
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单神经病的临床护理
- 2025年商业写字楼租赁合同模板
- 浙江国企招聘2025台州市城市建设投资发展集团有限公司所属企业招聘13人笔试参考题库附带答案详解
- 陕西一年级上试卷及答案
- 肇庆市实验中学高中历史二:第课战后资本主义经济的调整高效课堂教学设计
- 2025年中国勾环市场调查研究报告
- 纺织品及针织品售后服务考核试卷
- 木材与竹材的干燥技术对制浆影响考核试卷
- 石油开采与全球能源供需考核试卷
- 腈纶纤维在风力发电叶片的应用考核试卷
- 专家授课合同协议
- 护理临床带教老师培训
- 艾滋病宣传员知识培训
- 2024-2025学年广东省深圳市南山区四年级(上)期末数学试卷
- 风电项目合作框架协议
- 2025-2030中国具身智能行业研发创新策略与未来前景展望研究报告
- 2025年小学科学教材教法考试模拟测试卷及答案
- 《论语》(子路篇第十三)原文及翻译
- 学前儿童情感教育的家庭实践策略
- 美好家园《8未来城市》课件 -2024-2025学年浙人美版(2024)初中美术七年级下册
- 解析:2024年广东省深圳市龙岗区中考二模物理试题(解析版)
评论
0/150
提交评论