394062朱全树基于VC++的三维视景中虚拟实体的路径设置doc.docx
- 文档编号:28420868
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:24
- 大小:889.70KB
394062朱全树基于VC++的三维视景中虚拟实体的路径设置doc.docx
《394062朱全树基于VC++的三维视景中虚拟实体的路径设置doc.docx》由会员分享,可在线阅读,更多相关《394062朱全树基于VC++的三维视景中虚拟实体的路径设置doc.docx(24页珍藏版)》请在冰豆网上搜索。
394062朱全树基于VC++的三维视景中虚拟实体的路径设置doc
内容摘要
随着虚拟现实技术的应用越来越广泛,虚拟环境系统得到很快发展。
在虚拟仿真环境中经常要事先设置虚拟对象的运动路径,而仿真软件VegaPrime提供的PathTool工具能很好地解决了这一问题。
本文是通过采用VegaPrime和VC++作为软件平台来实现运动路径的变化显示,主要讨论了基于仿真软件VegaPrime的路径和导航器基本原理,详细阐述了如何应用这两个模块在LynxPrime中进行路径的设定,然后介绍了路径和导航器在VC++编程中的实现,最后基于实践应用探讨了仿真环境中虚拟实体运动路径的一些解决方法。
索引关键词:
路径导航控制点张力
第一章绪论-2-
1.1研究背景-2-
1.2研究的目的和意义-3-
2.1VegaPrime的基本情况-5-
2.2VP和LP的简介-5-
第三章虚拟实体的运动路径设定的实现-11-
3.1Path和Navigator模块的基本原理-11-
3.2在LynxPrime中创建路径和导航对象-11-
3.3Path和Navigator在编程中的实现-18-
3.4实现过程存在一些问题的解决方法-22-
第四章结论-24-
后记-25-
参考文献-27-
第一章绪论
1.1研究背景
随着计算机和信息技术等高新技术的飞速发展,计算机仿真技术也正在全球范围内得到迅速的推动,并在航空、航天、地面战场模拟以及其它复杂任务中发挥着越来越重要的作用,虚拟仿真环境开发成为当前研究的亮点,而三维视景中虚拟实体的运动体现得越来越重要了。
在虚拟仿真环境开发过程中,经常会遇到虚拟对象的运动路径设置。
一般情况是事先确定运动路线,记录路线上的若干控制点的位置,点与点的连线采取数据平滑处理,运动对象按照设定的路线运动。
VegaPrime是SGIPerformet基础上发展起来的环境仿真软件环境,它把常用的软件工具和高级仿真功能结合起来,可使用户以简单的操作、迅速的创建、编辑和运行复杂的仿真程序。
该软件具有良好的图形界面Lynx,完整的C语言应用程序接口API,丰富的适用库函数以及大量的功能模块,其中路径(Pathing)和导航(Navigator)模块是VegaPrime提供的两个路径控制模块。
应用这两个模块及其接口函数,用户可以为预先确定的路径创建关键点,然后通过虚拟场景的运动对象用Navigator穿行设定的Path来自动对运动进行控制。
1.2研究的目的和意义
本文中我们要研究的是以面向对象的思想对运动平台的三维实体运动路径的制作进行分析,提炼出了创建点集、设定路线、实体建模以及规定策略、导航等步骤;应用VegaPrime软件设置一系列动态的、有规律的运动路径,该软件可以根据用户需求进行高级功能仿真和特殊仿真需求的实现;还应用VC环境灵活的处理较复杂的路径设定
设计此课题的目的,是在仿真过程提供一个软件平台的基础之上,不断掌握整个软件的功能和分析该软件不完善之处。
通过利用VegaPrime软件完成相关任务,帮助规划人员确定最佳运动路径设定的方案,解决虚拟对象在运动路径中的很多问题。
VegaPrime软件中的PathTool是路径和导航类的图形设置界面,并直接显示所要编辑的三维虚拟场景。
使用这个工具,路径控制点将可以在三维场景中移动,在地形中插入、删除;导航器可以在PathTool实时环境中创建、编辑导航标记,并预览控制点的按照导航标记的运动过程。
VegaPrime的其它模块都支持VegaPrime导航器为它们特殊的导航功能,并可以设置自己的路径导航。
如果用PathTool创建了一条路径和一个导航器,路径和导航数据就作为路径文件和导航标记文件存在磁盘上,VegaPrime其它基本模块在配置中读入这些文件无需编写任何代码。
路径和导航也可以完全通过API接口函数编程创建。
在上面所述的课题背景下,研究基于三维视景中虚拟实体的运动路径设定具有很大的实际意义和可操作并成功的应用到了理学院漫游、野外综合演练仿真系统的虚拟仿真环境中,效果良好。
第二章VegaPrime概述
2.1VegaPrime的基本情况
VegaPrime是MultiGen-Paradigm公司开发的一个对象的著名虚拟现实平台,它可以方便地完成场景的构建和三维模型的绘制,并支持许多的特效。
VegaPrime作为一种硬件虚拟现实的软件接口,并且作为一个独立的工作平台,独立于硬件设备、窗口系统,用它编写的软件可以在WindowsNT以及更高级的操作系统间移植。
它是模拟虚拟现实和实时的应用软件,是开发实时视觉和听觉仿真、虚拟现实和通用的视频应用的业界领先的软件环境。
它把先进的仿真功能和易用的工具结合到一起,创建了一种使用最简单,但最具有创造力的体系结构,来创建、编辑和运用高性能的实时应用。
结合先进的模拟技术通过简单可利用的应用工具,它提供了一种能够快速准确的建立复杂的应用模型的方法,并且能够提供复杂的虚拟模拟原型。
2.2VP和LP的简介
Vegaprime(以后简称VP)是用于虚拟现实,实时视景仿真的一个实时三维驱动工具包。
在这个工具包中,包含了一个重要的编辑器Lynxprime(以后简称LP),它为VP提供一个人机交互界面。
VegaPrime原意是用来连接LynXPrime的。
虽然VegaPrime包含了所有的建立一个应用程序所必需的Api,但是LynXPrime简化了开发过程,不用写任何代码就可以配置一个应用程序。
LynXPrime是一个可以增加类的接口,定义接口参数的编辑器。
这些参数可以是观测点的位置,场景中的对象位置、运动,灯光,环境效果,目标硬件平台等等,都可以在一个acf文件存为一个接口框架。
一个acf文件包含一个VegaPrime应用程序初始化必须的和运行时要用到的信息,可以在活动预览窗口预览在acf中的定义活动,预览窗口可以交互式的定义acf文件。
活动预览窗口会持续不断的检查acf文件的变化,一旦有改变发生,它就会用新的数据更新VegaPrime的仿真窗口。
本文也可以用C++来开发可视化的应用程序。
可以在应用程序里根据特定环境修改接口值,例如当某个物体碰到了一个目标物时可以指定相应的位置变化。
VegaPrime应用程序也可以在一个图形通道里面加载acf文件。
当应用程序编译完成后就可以执行了。
关于LynXPrime和在VegaPrime中工作的详细信息可以查看VegaPrimeProgrammer’sGuide。
2.2.1VP系统结构
图2-1VP系统结构
2.2.2VP的应用组成
(1)应用程序
应用程序控制场景,模型在场景中的移动,和场景中其它大量的动态模型。
实时应用程序包括汽车驾驶,动态模型的飞行,碰撞检测,和特殊效果,如爆炸。
在VP外的开发平台创建应用程序,文件是以.ccp格式存档。
并包含了C++可以调用的VP库的功能和分类。
在编辑完成后就形成了一个可执行的实时3D应用文件。
(2)应用配置文件
应用配置文件包含了VP应用在初始化和运行时所需的一切信息。
通过编译不同的ACF文件,一个VP能够生成不同种类的应用。
ACF文件为扩展Mark-up语言(XML)格式。
首先可以使用VP编辑器LP来开发一个ACF,然后可以使用VPAPI动态地改变应用中模型运动。
对于实时应用来说,ACF不是必要的,但它可以将改动信息进行译码,记录在.cpp程序中,这样可以节省大量的时间。
(3)模型包
以前,通常是通过计算机辅助设计系统或几何学来创建单个模型,但这些方法在实时应用很难进行编码。
现在,可以使用MulitGenCreator和ModelBuilder3D,以OpenFlight的格式来创建实时3D应用中所有独立的模型。
可以使用CreatorTerrainStudio(CTS),以MetaFlight格式来生成大面积地形文件。
并可以使用这两种格式在VP中增加模型文件。
2.2.3LynXPrime用户界面
LynXPrime用户界面包含四个不同的部分:
树视图(InstanceTreeView)、GUI视图(GUIView)、API视图(APIView)、工具栏(ToolBar)。
对于已选择的类来说所有视图显示的信息除了一小部分格式不同外大部分相同。
还可以在多于1个视图中定义acf.
图2-2用户界面
(1)GUI视图(GUIView)
在用户界面中显示,可以很容易的使用,GUI视图显示acf的接口和参数。
可以在下拉列表中选择参数,在文本域里输入值。
当打开LynXPrime,第一个GUI视图被命名为myKernel,它是VegaPrime中的Kernal类的一个实例。
Kernel是应用程序的起点,它控制所有的实时操作。
(2)实例树视图(InstanceTreeView)
实例树视图显示了当前加载的acf文件和它的所有接口。
实例树视图显示了由父实例和子实例组成的实例等级图中的联结关系。
能看到在程序中实例间的相互关系。
如果在树中选择了一个实例,所有的视图都会同时显示它。
如果在文件中的一个实例的引用指向了不止一个地方,这个实例的名字就会跟在一个蓝色的箭头,向下的箭头
表示文件第一次被使用。
向上的箭头
表示有另外的引用指向实例。
图2-3实例树视图
在上面的例子中,myPipeline被展开,显示了myChannel连接myWindow,这是myChannel的第一个引用,所以前面有个
下箭头。
myChannel也被myObserver引用,在这个例子中它前面有个上箭头
。
当选择了一个实例,实例的属性和当前值会同时显示在GUI视图和API视图中。
介绍实例树视图几个主要部分:
1.通道(Pipeline)模块
通道指的是VegaPrime应用程序运行平台与图形生成硬件设备相连的显示终端屏幕,它决定了仿真应用提供给用户的可视范围的大小,表现为图形硬件所支持的最大分辨率。
注意:
图形硬件所支持的分辨率跟终端显示设备所使用的分辨率是不同的两个概念,大型的图像工作站都支持多个显示设备的同时输出。
2.窗口(Windows)模块
窗口在VegaPrime中代表的是一条渲染通道,渲染通道指的是可视化仿真系统实现中的整个渲染流程,所以要执行VegaPrime应用程序必须先定义一个窗口。
用户可以指定窗口在屏幕上的位置,由于屏幕支持图形硬件的最大分辨率,所以窗口的大小实际上可以超出当前显示终端的分辨率设置,其效果是一部分窗口在显示器上看不见。
3.频道(Channel)模块
频道代表了用户用以观察场景的特定视角,表现为窗口中的一个矩形区域,实际上所有实时渲染都是通过频道进行的,所以场景要显示出来至少还要定义一个频道。
一个窗口中可以包含任意多条频道,它们在窗口中的位置甚至还可以重叠。
4.视点(Observer)模块
视点是VegaPrime中的一个非常重要的概念,也是核心概念之一。
一个视点类似于一台摄像机或一台设置在数据库中的传感器,视点控制管理并且被锁定在一个场景运动体上,也可以同一个运动模型进行放置。
观察一个场景必须要由一个视点。
视点使用通道决定场景的观察体,就像照相机使用镜头观测区域一样,每个视点可以同时观察多个通道。
最后应用程序显用户最终是通过观察者的视角,从本质上讲是通过通道来观察场景的。
5.场景(Scene)模块
场景就是所有载入的模型对象的集合。
(3)API视图(APIView)
API区显示选定的模型的所有可能的变量。
在这里可以定义模型的值,就象在用户操作区一样。
但是在API中,可以直接给变量赋值。
当更改应用中的参数时,可参考API区中要使用的变量的值。
(4)工具条(ToolBar)
LynXPrime工具条包括所有操作模型及属性的快捷按钮。
这些功能同样可以在LynXPrime的目录中找到。
第三章虚拟实体的运动路径设定的实现
3.1Path和Navigator模块的基本原理
在VegaPrime模块库中的路径(Path)和导航器(Navigator)在虚拟场景中提供了控制运动对象轨迹的功能。
路径就是一组在场景中设置了的控制点;导航器是路径中与这些控制点相关的一组数据信息集合。
一个特定的导航器可以解释出路径的数据结构,并可以通过路径控制导航器穿过其控制点的运动方式。
路径和导航模块提供了vpPath类和vpNavigator类。
vpPath类通过路径对象中的位置作为厄密(Hermite)样条段的控制点。
这样,vpNavigator类就可以通过设置切向量、紧密度参数、速度、持续时间等与路径类相结合。
利用这些信息,导航器通过当前曲线段平滑进入下一曲线段。
VegaPrime的LynxPrime自带路径设置工具PathTool,可以为用户在未编写路径导航代码时设置控制点和导航参数提供了方便。
PathTool是路径和导航类的图形设置界面,并直接显示所要编辑的三维虚拟场景。
使用这个工具,路径控制点将可以在三维场景中移动,在地形中插入、删除;导航器可以在PathTool实时环境中创建、编辑导航标记,并预览控制点的按照导航标记的运动过程。
VegaPrime的其它模块都支持VegaPrime导航器为它们特殊的导航功能,并可以设置自己的路径导航。
如果用PathTool创建了一条路径和一个导航器,路径和导航数据就作为路径文件和导航标记文件存在磁盘上,VegaPrime其它基本模块在配置中读入这些文件无需编写任何代码。
路径和导航也可以完全通过API接口函数编程创建。
vpPath类提供函数设置路径控制点,vpNavigator类提供函数设置导航标记。
通过编程,可以根据需要动态的改变路径和导航参数,使得路径控制更加灵活。
3.2在LynxPrime中创建路径和导航对象
LynxPrime是VegaPrime模块设定的图形界面,用来定义和预览VegaPrime各种模块应用程序。
用户只需用鼠标的左、中、右键点击即可创建和驱动图形中的模块对象。
在不涉及源代码的前提下便捷地改变应用程序的性能,如显示通道、多CPU资源分配、视点、观察者、特殊效果等。
尽管VegaPrime包含了建立一个应用程序所必须的所有API函数,但是Lynxprime可以简化这些过程,且允许使用者在图形界面下定义和预览ADF文件而不用写代码。
在应用程序中,VegaPrimeAPI函数与LynxPrime相结合使用是非常有用的,能够减少很多复杂的工作。
路径和导航模块属于LynxPrime的两个基本模块。
VegaPrime可以根据要求和特定的仿真应用,很容易的直接加以扩展来满足特殊仿真的需要。
3.2.1创建路径对象
首先,如图3-4,打开LynxPrime图形界面中打开Pathing,在Pathing标题下创建路径对象名称,如MPI_WayPointSet_1。
然后在FileName标题下建立路径文件,为了便于记忆,路径文件一般和路径对象名一致。
如果你想在对话关闭就开始增加路径点的话就选择自动增加模式。
复杂的运动场景中可以创建多个路径对象。
图3-4创建路径
如图3-5,创建完路径后,打开Navigators界面,在Navigators标题下创建导航器对象名称,如MPI_Navigator_16。
然后在FileName标题下建立导航器路径文件。
同样,导航器文件一般和导航器对象名一致.在SelectPathWay标题下选择将要导航器经过的路径对象。
根据运动场景的需要,导航器对象可以定义多个,而且每一个导航器对象都有相对应的选项,只有用户选中时导航才会有效。
图3-5创建导航
3.2.2路径和导航的编辑
PathTool工具界面是编辑路径对象和导航对象的专用工具,它包括菜单栏、通用的工具栏、一个视窗。
在路径工具的GraphicWindow导航是很容易的—默认状态下,它被调成创建者移动模式—完全和CreatorGraphic视图导航相同。
比如,按下Ctrl键并使用鼠标右键进行相位控制;使用Shift+鼠标右键进行缩放控制。
而鼠标右键会自动围绕一个点旋转视图。
PathTool工具栏包括六大部分:
Display、scenes、Pathing、Motion、Data、Environment。
Display用来控制和设置显示对PathTool程序有效的属性,有Texture、Fog、Lighting、Normals、wireframe等的开关控制还有浏览位置的设置和放大/缩小场景、裁剪场景等操作;Pathing主要对路径控制操作,包括添加/移除/插入路径控制点等操作;Data用于输入、查看、编辑路径和导航数据;Environment包括PathTool应用软件的环境控件用于环境的变化和显示经度、纬度的值。
VegaPrime可以分别定义多个路径对象和导航器对象,视图当前选择的路径对象,其第一个控制点为绿色最后一个显示的点则是紫红色的,当前选择的控制点为红色,没有被选择的路径上的控制点为黄色。
选择一个导航器对象后,路径上的控制点就会根据导航器选项按顺序连接。
如果要改变选择的控制点的位置可以在视图用鼠标左键选点,也可以在左边控制节点对话框中输入坐标值精确定位。
3.2.3PathTool控制点操作
PathTool左边的工具栏主要是针对控制点和场景进行操作。
(1)Add(加入新点)
在一个选定的路径对象中加入一个新控制点,有两种方法:
第一种方法是在创建路径对象的时候选中Auto-AddMode按钮,用按下Ctrl键并使用鼠标左键定位;也可以在右边控制节点对话框中输入坐标值精确定位。
第二种方法是直接用工具栏“+”键添加控制节点并且按下Ctrl键并使用鼠标左键定位或者在坐标系中直接输入值就能完成控制节点的添加。
(2)Move(移动)
该选项是用来移动要修改的控制点。
可以直接用鼠标进行拖动或者在坐标系中直接输入值。
(3)Insert(插入)
该选项类似于加入新的控制点。
不同的是所插入的控制点在当前选择的控制点之后,后面的控制点标号自动增加。
(4)Delete(删除)
控制点的删除。
只要选中该选项,然后在正视图中找到需要删除的点,击鼠标左键删除,后面控制点的标号随之减小。
删除后的点无法恢复。
图3-6控制点操作的结果
3.2.4导航选项的操作
在创建导航对象的基础上选择显示高级的用户界面创建一个和导航名相关联的路径路线对象。
在导航选项栏可以选择不同段的导航对象进行导航,这样的目的为了能更直观的仿真效果和发现问题。
还可以选择不同的观察方式和着眼点。
导航的设置主要包括循环(Loop)、关闭循环(CloseLoop)、暂停(Pause)、重新开始(Reset)、反向(Reverse),延迟(StartDelay)时间、运动状态和速度等。
图3-7导航的设置
3.2.5路径与导航选项的几个重要设置
PathTool的左侧工具栏中设定Path和Navigator几个重要参数设置,对控制点的属性的设置至关重要。
(1)LoopAction(循环动作)
当运动对象到达最后一个控制点后,循环动作指示样条曲线导航器该做什么动作;
1.Stop:
运动对象到达最后一个控制点后停止运动;
2.Loop:
运动对象到达后从最后一个控制点运动到第一个控制点再继续运动;
3.Restart:
运动对象到达后从第一个控制点重新开始运动。
(2)StartatControlPoint(运动对象从某控制点开始运动)
导航器在穿越控制点的运动时不一定从第一点开始,可以从任何一个控制点开始它的旅程。
(3)DelayStart(延迟开始)
在穿越控制点开始前所需要等待的时间,默认值为0.000000。
(4)RenderPath(渲染路径)
渲染路径根据所设的控制点描绘出近似的运动曲线。
选中这一选项就显示一条黄色(颜色可以自己选择)的路径,这就是运动对象所要运动的轨迹。
(5)Segmenttype(段类型)
段就是两控制点之间的部分,如果段是linear(线性),就表示两控制点之间是以一条直线连接。
Hermite(厄密段)用样条曲线来连接两控制点,并且通过张力向量计算曲线的曲率。
(6)VelocityModes(速度模式)
有三种设定速度的方法:
1.Duration(持续时间)表示导航器穿过一段曲线所花费的时间恒定,但是控制点之间的相距越近,速度越快,相距越远,速度越慢,因此整个曲线的运动速度不恒定。
2.ConstantVelocity(恒定速度)表示导航器以匀速运动穿过曲线每一个控制点。
3.Aceeleration(加速度)表示导航器可以以常数、指数增长、线性变化等一些变化来运动。
我们还可以在不同段设置不同的速度这对地形起伏变化有很大帮助使仿真效果更逼真,还可以容易发现不同段的问题。
(7)改变路径点的方法
在有路径点后,如果想要改变一些路径点的。
PathTool提供了几种方法。
1.可以在当前的光标位置上改变一个现有的路径点的坐标系。
2.点击MovetheWayPointUp键或者MovetheWayPointDown键直到放在新的位置可以改变,这个方法只能在被选择的路径点被横穿时才能改变其顺序。
3.用手工操作只能粗略定位坐标。
(8)坐标轴
在PathTool平面地面的坐标系统中,用X,Y,Z来表示观察者的位置。
观察者的方向是用坐标系统中的朝向,斜度和转角度的HPR值来表示。
坐标轴是显示在默认坐标和定向系统里,+Z是向上,+Y是向北,而+X是向东。
而朝向是围绕Z正方向旋转,即以一个计数器顺时针方向旋转。
这样北是0,西是90,南是180,而东是270这些对定点有很大帮助。
(9)Zoomin/Zoomout(放大、缩小)
直接对场景整体放大或缩小,也可以对场景中某一区域比较精确地放大或缩小。
当需要对特定区域操作时,按鼠标右键+Shift拖动进行缩放控制,出现蓝色边框,这时的放大或缩小就只针对所选的蓝色边框内有效。
3.3Path和Navigator在编程中的实现
在VC++环境下编程,用户可以把VegaPrime提供的zsVegaView类作为调用和控制VegaPrime的编程接口,该类封装了调用Vega的头文件vp1h,用户可以根据需要扩充该类。
如果路径和导航已经在LynxPrime中定义,并且Object对象已经连接了导航器,则只要在编程中调用该Object到场景中,它就会按照所定义的路径和导航特性在场景中运动。
但是用这种方法实现的运动在场景中缺乏路径和导航随时间变化的灵活性。
VegaPrime提供了vpPath类和vpPathNavigator类的API函数库,在编程中几乎完全可以实现LynxPrime图形界面中路径和导航模块的所有功能,而且VegaPrime的路径编程相对于LynxPrime具有很大的灵活性,更加方便地通过程序进行修改或调整控制点参数。
VegaPrime提供了路径文件的读/写、路径属性的设置、控制点创建和设置等函数。
3.3.1基于VPAPI的应用程序编写流程
在VC++中,创建一个项目是会自动产生一个窗口,因此我们不需要定义窗口,而只需在所需的窗口中进行必要的程序设计即可。
在实际程序设计之前,必须建立一个基于视图类的私有类,贯穿于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 394062 朱全树 基于 VC 三维 视景中 虚拟 实体 路径 设置 doc
![提示](https://static.bdocx.com/images/bang_tan.gif)