300 likes | 989 Views
Vega prime 基本应用. 制作人:** 2006.7.15. 主要内容如下:. Vega prime 概述 Lynx prime 的基本应用 几个常用的 Vega prime 类 Vega prime 工作流程. 1. Vega prime 概述. 概念:简单的说 Vega prime (以后简称 VP )是用于虚拟现实,实时视景仿真的 一个实时三维驱动工具包。 在这个工具包中,包含了一个重要的编辑器 Lynx prime( 以后简称 LP) ,它为 VP 提供一个 人机交互界面 。. Vega prime 的系统结构:. VP 实时应用的组成.
E N D
Vega prime 基本应用 制作人:** 2006.7.15
主要内容如下: • Vega prime 概述 • Lynx prime 的基本应用 • 几个常用的 Vega prime类 • Vega prime 工作流程
1. Vega prime 概述 • 概念:简单的说Vega prime(以后简称VP)是用于虚拟现实,实时视景仿真的一个实时三维驱动工具包。 • 在这个工具包中,包含了一个重要的编辑器Lynx prime(以后简称LP),它为VP提供一个人机交互界面 。
VP实时应用的组成 • 应用程序 • 应用配置文件 • 模型包
应用程序 应用程序控制场景,模型在场景中的移动,和场景中其它大量的动态模型。实时应用程序包括汽车驾驶,动态模型的飞行,碰撞检测,和特殊效果,如爆炸。
应用配置文件 应用配置文件包含了VP应用在初始化和运行时所需的一切信息。通过编译不同的ACF文件,一个VP能够生成不同种类的应用。ACF文件为扩展Mark-up语言(XML)格式。 你可以使用VP编辑器LP来开发一个ACF,然后您可以使用VP API动态地改变应用中模型运动。对于实时应用来说,ACF不是必要的,但它可以将改动信息进行译码,记录在.cpp程序中,这样可以为您节省大量的时间。
模型包 一般使用MulitGen Creator和ModelBuilder 3D,以OpenFlight的格式(.flt)来创建实时3D应用中所有独立的模型。
2.Lynx prime 的基本应用 LP是一个编辑器,用于增加不同种类的模型,为模型定义参数。这些参数都存贮于应用配置文件(ACF)中的一个模型结构内,例如观察者的位置,模型及它们在场景中的位置,在场景中的移动,光线,环境效果,及目标硬件平台。ACF文件包含了VP在初始化和运行时所需的信息。
LP的界面构成 LynX Prime用户界面包括四个部分:实例树形显示区(Instance Tree View),用户操作区(GUI View),应用程序区(API View),和工具条(Toolbar)和目录区(Menus)。所有这些区域将显示同一选定的对象的信息,但是这些信息是以不同格式进行安排的。你可以在一个或多个工作区进行操作来定义ACF。
GUI View:用户操作区在用户界面中显示ACF模型及相关的参数,操作起来十分方便。 Instance Tree View:实例树形显示区显示目前正在操作的ACF文件和文件中包含的所有模型。 API View:API区显示选定的模型的所有可能的变量。 Toolbar:L P工具条包括所有操作模型及属性的快捷按钮 。
下面通过一个简单的实例来认识一 下LP的基本操作。
3.几个常用的 Vega prime类 • VpApp类 vpApp类用来定义一个典型的VP应用的框架。它在vpApp.h中被定义了。所有子方法(member methods)都被内嵌了。使用者可以拷贝和修改vpApp类。 vpApp的主体封装了VP应用中经常用到的vpKernel的功能。vpApp类控制实时功能(包括定义ACF、配置仿真类、仿真循环、更新和退出)。
Methods: • vpApp() • initializeModule(const char *) • beginFrame() • breakFrameLoop() • configure() • define(const char*) • endFrame() • getFrameNumber() • getKernel() • isConfigured() • run() • unconfigure() • update()
Methods Inherited from vuMemBase • getRef() • getSizeAllocated() • getSizeRequested() • ref() • unref()
vpKernel 类 VpKernel类是vsServiceMgr类的衍生类. 核心功能包括帧循环的控制和vsServices的管理。VP 程序中的定义,配置,帧循环等是在vpKernel类中定义的。
Methods • instance() • configure() • define(const char*) • isConfigured • unconfigure() • update()
vpPipeline类 vpPipeline类管理窗口和硬件图象管道之间的映射。
一些常用的方法: 在窗口中加入新窗口: vpPipeline::addWindow() 删除窗口: vpPipeline::removeWindow() 与之密切关联的类还有vpWindow, vpChannel
4.Vega prime 基本工作流程 • 初始化 • 定义 • 配置 • 仿真循环 • 关闭
初始化 vp::initialize执行如下任务: 检查license是否正确 初始化静态变量(static variables)和单例类(singleton classes) 初始化内存分配(memory allocator) 初始化渲染库(rendering library) 初始化场景(scene graph) 初始化ACF剥析程序(ACF parser) 初始化模块界面(module interface) 初始化内核(kernel classes)
定义语句 类实例可通过代码创建或通过传递ACF文件给vpKernel::define方法 (或vpApp::define, 若 vpApp已经使用)。 ACF文件中的类实例将在VP解析文件时自动创建。
配 置 配置从ACF中分解而来,同时将不同的类关联起来。例如,它将系统中定义的pipeline添加给服务管理器,并且为每个类配置相关的联系。 configure功能是相互的,通过unconfigure可以将应用配置返回到configure前的状态。 configure方法经常被用户反复运用。 configure ()例子 //configure my app app->configure();
仿真循环(帧循环) 仿真循环包括一个函数调用: void vpApp::run() run()执行主要的仿真循环。这个功能会持续呼叫beginFrame(),接下来是endFrame()用来结束循环,当然还可以在循环过程中用breakFrameLoop()来结束循环。接着这项功能会呼叫unconfigure()。
关闭 退出VP vp::shutdown(); vp::shutdown执行如下任务: 释放被kernel classes分配的内存 结束各模块以释放它们在应用中所占用的内存 终止多线程 将licenses返回给license server
#include <vpApp.h> int main(int argc, char *argv[]) { //初始化VP vp::initialize(argc, argv); //创建 vpApp实例 vpApp *app = new vpApp; //载入 acf 文件 if (argc <= 1) app->define("simple.acf"); else app->define(argv[1]);
// 配置应用 app->configure(); // 帧循环 app->run(); //取消引用 app->unref(); // 关闭,退出VP vp::shutdown(); return 0; }
本讲完! 谢谢各位!请多多指教。