Vega Prime的SpeedTree模块程序设计

发表于2015-08-26
评论0 1.6k浏览

Vega Prime的SpeedTree模块程序设计

1 引言

   SpeedTree是美国IDV(Interactive Data Visualization)公司研发制作的一款专门的三维树木建模软件,支持大片树木的快速建立和渲染,而且它本身还带有强大的树木库。不仅可以通过插件将树木导入到其他的三维建模软件中使用,也可以为游戏引擎提供强大的树库支持,目前已经成为著名游戏引擎Unreal的御用树木生成软件。
8 D0 Z: q* k+ [! u; S" S; D" f
5 U  v8 A* I6 }1 I) K   Vega Prime是Presagis公司研发制作的一款用于创建及配置视景仿真、多领域仿真和通用可视化应用的视景平台,利用其跨平台性与可扩展性,Vega Prime成为实时3D应用开发与调度最佳的COTS类工具包。Vega Prime开发环境大大提高进行实时3D应用的创建与配置速度,同时提供功能强大的扩展模块,以解决实时3D应用开发中遇到的难题,其中的SpeedTree模块能够在实时帧率下进行真实感植被景观的定义与渲染。SpeedTree模块集成来自IDV公司的获奖产品SpeedTree技术,此技术目前已经成为US DoD训练系统和大多数视景游戏的特定特征。SpeedTree模块能对Vega Prime应用中高密度植被进行定义和渲染,能在达到最佳视觉效果的同时保持原有的渲染效率不变,能生成具备碰撞映射、阴影和精细纹理的植被效果,提供具有200种树和植物种类的模型库,包括阔叶树、针叶树、棕榈树、仙人掌和灌木,允许对现有树型进行修改并创建新的树型。SpeedTree植被还能方便的添加到现有的OpenFlight和MetaFlight数据库中。

" C& N. a, `5 w- K( ]0 _8 `在下文中将讨论SpeedTree for Vega Prime模块的程序设计方法。

 

 

 

2 SpeedTree模块
  T( L' * ~2 K8 k
8 ~) v$ E% w8 r5 M- S% U6 t) B   要使用SpeedTree for Vega Prime模块,必须安装Vega Prime 2.1.2或以上版本。
2.1 SpeedTree模型定义文件
* j* F3 _. n! M/ b8 ]; i9 U; E
- m6 l  q  ^0 y" X! N   SpeedTree模型定义文件(SpeedTree Definition File)用来批量定义spt格式的源模型及其渲染属性,6 p+ V. y$ n3 e其文件名是vsgn_speedtree_defs.txt。该文件名是不可更改的,OpenFlight加载器在加载SpeedTree模型时,只查找文件vsgn_speedtree_defs.txt,否则,将会产生不可预测的结果。

 

vsgn_speedtree_defs.txt示例文件如下所示:

其中,关键字MODEL定义一个新的模型实例,接着是标识模型的文件名,然后在“{“和“}”之间定义模型参数。

2.2 交叉引用文件
8 I) i9 j8 ?0 R* y# C& t   交叉引用文件(Cross Reference File)用来定义OpenFlight外部引用名字和替换文件名字之间的映射关系,OpenFlight加载器使用Vega Prime提供的搜索路径尝试加载外部引用的替换文件。交叉引用文件的文件名是vsgn_xref_map.txt,该文件名是不可更改的,OpenFlight加载器在加载SpeedTree模型时,只查找文件vsgn_xref_map.txt,否则,将会产生不可预测的结果。vsgn_xref_map.txt示例文件如下所示:

 

tree01.flt tree1.speedtree
: a0 q1 j0 ~' x; U9 `/ ?3 Ctree02.flt tree2.speedtree
( K+ w: O2 b: ztree03.flt tree3.speedtree
1 @4 d5 @, D$ d2 L4 C7 Q3 Ltree04.flt tree4.speedtree

   其中,第一个字符串是OpenFlight模型数据库外部引用文件名,第二个字符串是替换文件的名字,用来加载代替前面的外部引用文件。当OpenFlight加载器读到外部引用节点时,它将用外部引用文件名同交叉引用文件中提供的文件名进行比较,如果找到匹配的项,就尝试用替换文件代替外部引用文件。

2.3 SpeedTreeControl类

   SpeedTreeControl类用来控制SpeedTree模型的属性,该类必须存在且唯一,其定义的属性包括:Wind Effects、Normal Mapping、Detail Texture、Self-Shadow和Instance Culling。为了在Vega Prime的Active Preview里看到SpeedTree模型,在应用配置文件ACF里必须有一个SpeedTreeControl实例。


3 SpeedTree模块程序设计
4 `& t, y% Q9 P+ A" e6 v: x6 Y2 _
2 P/ x! q3 T* D6 KSpeedTree for Vega Prime模块程序设计流程主要是:

   ⑴ 用SpeedTreeCAD创建spt模型;
$ n- G5 Q$ b1 _0 x% L, U& X8 y   ⑵ 用Creator创建包含外部引用的flt模型;
8 s2 d; e3 n( F8 v   ⑶ 编辑vsgn_speedtree_defs.txt和vsgn_xref_map.txt文件;

   ⑷ 编辑ACF文件,添加在⑵中创建的flt模型,添加SpeedTreeControl实例;
; t7 _- |" N5 F8 }9 `: N* b   ⑸ 在Active Preview里进行预览,或者用VC编程进行驱动。
# y6 [, M3 q6 I; h
% Y) n- i! @; `3.1 创建spt模型
0 @. y" J6 v0 ?; @$ z% I   在Vega Prime 2.2.1版本中带了SpeedTreeCAD 4.1版本,可以用来创建spt模型,运行界面如图1所示。这不是讨论重点,所以不做详细讨论

图1 SpeedTreeCAD 4.1运行界面

 

3.2 创建flt模型
! t3 + q1 y% W6 `9 R( F   flt模型是OpenFlight格式的模型数据库,OpenFlight格式是Multigen Creator建模软件独创的用于描述三维虚拟场景的层次化数据结构,已经成为事实上的业界标准数据格式。在flt模型数据库中可以添加对其他模型数据库的外部引用,外部引用的内容在层级视图中被放置在外部引用节点中,外部引用节点必须用跟组节点同级别的节点作为父节点。外部引用的模型对象在当前模型数据库中具有只读属性,不能在当前模型数据库中对其进行编辑,但是可以对外部引用进行整体的移动、旋转或者缩放。向模型数据库中添加外部引用的步骤如下:

 

   ⑴ 在层级视图中选择适当的组节点,单击“Parent”按钮将其设为父节点;

   ⑵ 单击菜单“File”-“External Reference”,打开外部引用对话框

   ⑶ 在外部引用对话框的“External File Name”编辑框中输入被引用的模型数据库文件名;

   ⑷ 单击“OK”按钮完成外部引用。

# f& z/ r, n4 e! v" l
& v+ o  }5 P* t( k! |7 Z; J   还有一种常用的外部引用模型数据库的方法是直接在层级视图中,通过创建外部引用节点来进行外部引用操作。具体做法是,首先选择适当的组节点,然后打开创建工具箱,单击创建外部引用工具按钮。
   下面具体创建一个包含外部引用的flt模型,使用的Creator版本为3.2,运行界面如图2所示。

图2 Creator 3.2运行界面

 

打开Creator,在默认状态下,创建一个外部引用节点,在外部引用对话框的“External File Name”编辑框中输入“tree01.flt”, 单击“OK”按钮退出对话框。单击菜单“File”-“Save”,打开保存文件对话框,在文件名编辑框中输入“tree.flt”,单击“保存”按钮退出对话框,关闭Creator。


4 }; W8 S! p( _8 V+ H3.3 编辑模型定义文件和交叉引用文件:
  可以用任意文本编辑器进行编辑,这里用的是Windows记事本,具体定义如下。
" m* B# l) d; @! X/ d: u& [, I编辑vsgn_speedtree_defs.txt文件内容如下:

 

编辑vsgn_xref_map.txt文件内容如下:
tree01.flt tree01.speedtree

这两个文件定义了外部引用文件和替换模型文件的对应关系。

如上所示,用模型tree01.speedtree代替模型tree01.flt,而模型tree01.speedtree的源模型为文件Beech_RT.spt,即最终tree01.flt被Beech_RT.spt代替。

# b/ x3 E7 V2 u! g3.4 编辑应用配置文件ACF
2 Y( q  s9 V- W& s
/ r- [, _: N1 `' ]7 `5 f: O   应用配置文件(Application Configuration File,ACF)包含了Vega Prime应用在初始化和运行时所需的一切信息,采用流行的通用文件格式扩展标识语言(XML)格式存储,可以使用Vega Prime的可视化编辑器LynX Prime进行开发。这里使用的LynX Prime版本为2.2,运行界面如图3所示。

图3 LynX Prime 2.2运行界面


- B! ?8 t! p3 A1 L! I
$ G+ i% ^" D# wACF文件具体定义步骤如下:

/ k0 {  Y8 S/ M# O5 P  g  }    ⑴ 打开LynX Prime,在默认状态下,创建一个Object实例,模型文件名选择前面用Creator创建的tree.flt,模型位置设置为(0,60,55),其他参数默认;
8 H3 R( w3 I- F  |, _7 J8 t6 z    ⑵ 创建一个SpeedTreeControl实例,参数设置默认;
  I6 W! ?! u# ~! ~$ a! |; v  o    ⑶ 编辑搜索路径SearchPath,添加模型文件tree.flt和Beech_RT.spt所在的目录;

    ⑷ 修改运动模式,将其设为MotionGame;

    ⑸ 修改观察者myObserver的位置(x,y,z)为(0,0,60),姿态(h,p,r)为(0,0,0);

    ⑹ 单击菜单“File”-“Save”,打开保存文件对话框,在文件名编辑框中输入“test.acf”,单击“保存”按钮退出对话框,关闭LynX Prime。


! T( C$ B  q% `( x2 b3.5 程序运行效果
   对上面建立的ACF文件,可以用LynX Prime打开,在Active Preview里进行预览,也可以用VC编程进行驱动。使用VC编程驱动时,可以动态改变环境的风速和风向,使SpeedTree模型做出随风摇摆的不同响应。在Active Preview里预览效果如图4所示,在MFC单文档框架下的运行效果如图5所示。

图4 在Active Preview里预览的效果

图5 在MFC单文档框架下运行的效果


% J2 X3 S9 b# y5 R$ K4 结语
2 i6 Q  v1 i9 S: f- S1 x    SpeedTree模块增强了Vega Prime中树木模型的真实性,调整Vega Prime里环境风的参数,SpeedTree模型能够以摇摆的方式做出逼真的反应。结合实例介绍了Vega Prime中SpeedTree模块的基本程序设计方法,在此基础上可以开发SpeedTree模块的具体应用。程序的开发运行环境为:Windows XP SP3、VS2005、Vega Prime2.2、Creator3.2。


文章转自:VR虚拟社区

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引