Vega Prime入门教程08:模块

Vega Prime入门教程索引:Vega Prime入门教程索引

本部分以VP安装目录下的dll为基础,介绍各个模块的功能和效果。

VSG函数

VSG(Vega Scene Graph)是Vega Prime的基础框架,属于最底层。

模块说明
vsgcXML库,函数以vc开头
vsgiImage图片处理库,支持5551/bmp/gif/ico/jpc/jpg/pcx/png/ppm/raw8/raw16/raw32/sgi/tga/tiff
vsgnNode节点加载器,支持加载batch/builder/flt/nsf/speedtree/star/txp/vsb模型
vsgrRender渲染库,函数以vr开头
vsgsScene场景,函数以vs开头
vsgshShader Loader,着色器加载器
vsgtTexture,纹理
vsguUtility工具,函数以vu开头
vsgvtVirtual Texture,虚拟纹理

VP模块

VP函数直接继承自对应的VSG函数。

声音(Audio)模块

该模块主要给模型提供声音,比如直升机飞行时螺旋桨的声音、汽车行驶时发动机的声音。

API

  • Sound Listener 音量,就是控制声音大小
  • Sound Spatial 立体音,3D音,声音会因为距离听者的远近而产生不同的效果
  • Sound Ambient 环境音,背景音,声音不会因为距离听者的远近而有不同效果,比如视频里面的BGM,你离视频的远近是立体音

效果

带内部建筑(BWI)模块

BWI,Building With Interiors,室内建筑,即内部包含子建筑的建筑模型。

此控件是个属性,用于标识此模型为BWI模型。

至于如何建BWI模型,详见:还没有

API

  • BWIAttribute 属性值,有它就表示此模型是带子建筑模型。

用法

创建实例并添加到工程树里面。

效果

摄像头(Camera)模块

镜头,摄像头,滤镜,它给画面本身提供特效

API

  • Camera 摄像头
  • CameraCompositeEffect 此API是依附于Camera的,也就是说这两个一般一起出现。

用法

位于Observer之下。

效果

通用数据库(CDB)模块

说明

CDB

CDB, Common Database,通用数据库,数据库中包含一个地区的全部地形数据和建筑模型。可以被Vega Prime/Terra Vista/STAGE等软件使用。

它包含多个纹理、模型数据,需要

LADBM

来进行管理,需要

虚拟纹理

进行技术支持显示。

LADBM

LADBM,Large Aread Database Management。是一个专门用于处理、分析和管理大范围地理数据的软件模块或组件。这种模块可能集成在更大的地理信息系统或数据管理平台中,以支持对地理数据的有效管理和利用。

将多层次的地理数据以数据库的形式管理。

虚拟纹理

虚拟纹理(Virtual Texture,VT)是一种以时间换空间的纹理流送技术,它最大的好处在于能够让我们使用多种高分辨率纹理,而不像传统流送一样受到内存和带宽限制。

传统流送(Mipmap Streaming)在需要使用某个纹理时,会一次性将对应mip的整个纹理全部加载到GPU内存中,即使使用这个纹理的对象只会被看到一小部分,这样的做法有时会造成很大的流送冗余。而虚拟纹理(Virtual Texture)通过预先将纹理划分为更小的区块,在流送纹理时先分析看到的对象,只流送能看见的那部分纹理,以最大限度地去除流送冗余,节省出更多的内存空间来。

由于纹理流送的方式发生了改变,能够使用的理论(虚拟)内存成数量级增长。

简单来说,虚拟纹理只会加载你会看到的部分纹理

虚拟纹理是LADBM和CDB的技术基础。

API

  • CDBAutoConfig CDB数据库位置、场景、观察者
  • CDBGlobals 阈值、缩放控制
  • CDBLADBMPagingCenter 视图中心控制
  • CDBLADBMPagingStrategyPoint 调用中心CDBLADBMPagingCenter以显示
  • CDBVTCenterCompute 计算虚拟纹理的可视中心
  • CDBVTHyperTexture 虚拟纹理设置
  • CDBVTTechniqueRaster 属性设置
  • LADBMGeometryGridDataset 几何网格数据库
  • LADBMGeometryGridDatasetTXP
  • LADBMIsectorLOSP
  • LADBMPagingCenter 页面中心
  • LADBMPagingStrategyPoint 页面策略点
  • LADBMVTCenterCompute 当前页面中心点计算器
  • VTCenterIsector 中心区域
  • VTHyperTexture 超级纹理
  • VTHyperTextureMaterial 超级纹理材质
  • VTTechniqueAnalyze
  • VTTechniqueBumpMapDOT3
  • VTTechniqueBumpMapDOT3HyperTexture
  • VTTechniqueDefault
  • VTTechniqueHyperTexture
  • VTTechniqueRaster
  • VTTechniqueShader
  • VTVirtualTextureDataset 纹理数据库
  • VTVirtualTextureMgr 虚拟纹理管理器

演示

CDB需要LADBM来管理,需要VT来显示,这三个是一套使用的。

使用Vega Prime入门教程15.03:CDB安装安装配置使用CDB。

运行效果:Vega Prime入门教程15.04:CDB测试

演示视频

坐标系(Coord)模块

Vega Prime使用的坐标系系统。同时提供坐标系转换功能

API

  • CoordConverter,坐标系转换
  • CoordConverter_GeoRefMatrix
  • CoordConverter_GeoRefVec3
  • CoordSys
  • CoordSysAutoConfig,通过指定文件配置坐标系
  • CoordSysEllipsoid,坐标系类型,默认球形,还有WG48
  • CoordSysProjectACEA,投影方式
  • CoordSysProjectLCC,投影方式
  • CoordSysProjectMPIFlatEarth,投影方式
  • CoordSysProjectStereographic,投影方式
  • CoordSysProjectTrapezoidal,投影方式
  • CoordSysProjectUTM,投影方式

人体(DIGUY)模块

Mak DI-Guy软件介绍详见:DI-Guy软件介绍

vpdiguy模块就是Vega Prime官方提供的集成接口,用于方便调用。

缺点是限定了版本,VP22.0对应版本是13.2。

API

  • DiguyCharacter 人物模型
  • DiguyScenario 场景
  • DiguySettings 设置

使用

场景在上,人物依附于场景。

效果

需要安装指定版本的DI-GUY,以及对应授权。

实体(Entity)模块

vpEntity(实体)是vpObject(一般情况下加载模型的对象)的一个更复杂的版本。它在API级别上使用,并提供了与vpObject相比的额外功能。附加功能包括模型属性、铰接的部分操作支持、基于模型模板的模型创建和代理支持。在vpEntity上下文中,proxy(代理)是指在同步/异步加载期间操作模型组件的过程,其中对模型组件的所有操作请求都会被记住并应用于模型,而不管它何时出现在场景中。这个API的主要内部用户之一是vpSim模块,也被称为Sim适配器插件。Vega Prime通信层(DIS/HLA/CIGI)对任何需要实体操作的东西调用这个API。

API

  • EntityModelTemplate,实体模型,需设置模型路径等等参数。
  • Entity,实体属性,依赖于实体模型

用法

创建实例到工程树中。

示例

待补充

环境(Env)模块

vpEnv模块定义了Vega Prime的环境。环境可以控制基本的大气效果,如照明和雾,也可以作为其他更复杂的环境效果的管理者。

支持的环境效果包括:

  • 太阳,myEnvSun
  • 月亮,myEnvMoon
  • 星星
  • 天空和地平线
  • 云朵

API

  • Env 环境父对象
  • EnvCloud3D 三维云朵 依附于EnvCloudLayer2D
  • EnvCloudLayer2D
  • EnvCloudLayer3D
  • EnvCloudVolume 卷积云
  • EnvMoon 月亮
  • EnvRain 雨
  • EnvSkyDome 天空
  • EnvSnow 雪
  • EnvStars 星星
  • EnvSun 太阳
  • EnvWind 风
  • EnvWindLayer 风层
  • EnvWindVolume 龙卷风

用法

创建一个Env实例,所有效果依附于这个实例。

默认情况下工程包含部分实例。

演示

直接使用默认工程预览就可以查看了。

特效(FX)模块

两个模型运动时产生的效果。比如说,投一个石子到河面,河面会泛起涟漪。

API

  • FxBlade 直升飞机螺旋桨旋转效果
  • FxConstantLengthLine
  • FxConstantTensionLine
  • FxFlightRibbon
  • FxLaser 激光
  • FxMissileTrail 导弹尾迹
  • FxParticleSystem 粒子系统
    • FxDebris 碎片
    • FxExplosion 爆炸
    • FxExplosion2
    • FxExplosion3
    • FxFire 燃烧
    • FxFlak 炮火
    • FxFlash 闪光
    • FxFlame 火焰
    • FxIlluminanceFlare 在IR视图中显示爆炸效果
    • FxSmokeBall
    • FxRotorDust 灰尘
      • FxRotorDustOwnship
    • FxSmoke 烟雾
    • FxSmokeBall
    • FxSplash 泼洒
  • FxRotorWash 直升机螺旋桨旋转和地形组合效果

使用

依附于场景和观察者

演示

光照(LightLobe)模块

模拟灯泡、汽车灯光。

API

  • Light 位置 方向
  • LightLobeControl 通道 启用
  • LightLobeProjected 投影方式

用法

位于场景中

演示

海洋(Marine)模块

创建可以实时模拟真实的海洋、湖、海岸线的水面。

API

  • MarineBreakingWaves
  • MarineFxBowWaveAngled 海面效果
  • MarineFxBowWaveLevel 海面效果
  • MarineFxGeometricWake 海面效果
  • MarineFxHullWake 海面效果
  • MarineFxObserverSeaSpray 海面效果
  • MarineGlobals
  • MarineOceanFixedLocation 海洋
  • MarineOceanObserverCenterd 海洋
  • MarineOceanOcclusion 海洋
  • MarineOceanSurfZone 海洋
  • MarineOceanTechnique 海洋
  • MarineShipMotionStrategy 船移动策略
  • MarineWaveGeneratorFFT 水面波纹生成算法
  • MarineWaveGeneratorFFTUserSpectrum 水面波纹生成算法
  • MarineWaveGeneratorGerstner 水面波纹生成算法

使用

海洋在上,生成波浪,波浪与船形成特效。

演示

路径(Path)模块

场景和模型运动方式

API

  • MotionDOFOscillator
  • MotionDriver 车辆行驶
  • MotionFly
  • MotionGame
  • MotionOscillator
  • MotionSpin 绕球移动
  • MotionTetherFixed
  • MotionTetherFollow
  • MotionTetherSpin
  • MotionUFO VP的默认运动方式,就和UFO一样,以观察者为中心看向四面八方。场景是个球,观察者位于球心。
  • MotionViewer 默认场景不动,鼠标点击以UFO方式移动
  • MotionWalk 点击一次动一下
  • MotionWarp 只能操作x/y方向

用法

给Observer设置运动方式。

演示

默认的UFO方式

Driver方式移动

路径(Path)模块

三维模型指定移动路径。

API

  • PathFinder 路径属性
  • PathFinderCardinalSpline 曲线路径属性
  • PathFinderHermiteSpline 曲线路径属性
  • PathFinderKochanekBartelSpline 曲线路径属性
  • PathFinderLinear 线型路径属性
  • PathKinematicState 运动状态
  • PathLookAtState 观察点状态
  • PathNavigator 路径导航器
  • PathSetSelector 点集选择器
  • PathWay 路径
  • PathWayPointSet 点集
  • PathWayPointSet_WayPoint 点集中的每个点

用法

  • PathWayPointSet_WayPoint是PathWayPointSet的子对象
  • PathWayPointSet是PathSetSelector的子对象
  • state/spline是pathway的子对象
  • PathWay是PathNavigator的子对象

效果

这个飞机的运动轨迹就是由vpPath指定的。

遮盖(Overlay)模块

在原有画面上再添加一个画面,这个画面中可以是文字、模型等。

API

  • Overlay2DImage 遮盖中图片
  • Overlay2DLineStrip 遮盖中线段
  • Oberlay2dText 遮盖中文字
  • OverlayPointToPoint 遮盖中连接两个对象的线

用法

创建一个实例。

设置实例的父对象通道。

如果遮盖有模型,还需要设置模型的父对象为遮盖

效果

阴影(Shadow)模块

三维模型在阳光之下会在地面、地形上形成黑色的阴影,此模块就是模拟这种效果。

API

  • ShadowDynamicShadows 动态阴影
  • ShadowPlanar

平面阴影,直接把模型压扁上色的阴影,有个问题就是,如果遇到不是平面,就会穿模。

有部分阴影是在斜面土地下面。

用法

静态阴影就是创建实例,然后设置模型和太阳。

动态阴影要设置通道、光源

效果

环境(SilverLining SDK)模块

详见:SilverLining Sky & 3D Clouds SDK

既然SilverLining本身是SDK,那么Vega Prime的SilverLining模块很有可能是在此SDK基础上开发的。

SilverLining SDK只提供了Sky和Cloud,同样的,vpsilverlining也只提供了天空和云彩。

vpEnv模块不同,后者还提供了太阳、月亮、时间等等。

API

  • SilverliningCloudLayer 云层
  • SilverliningSettings 设置
  • SilverliningSky 天空

用法

创建实例并添加到myEnv中

效果

仿真适配器(SIM)模块

SIM 适配器(Adapter)是Vega Prime用于发送和接收DIS/HLA/CIGI或自定义协议信息到或者从其他程序的插件。其他应用程序必须是DIS-/HLA-/CIGI-兼容的,如Presagis STAGE。如果创建了自定义连接,则其他应用程序必须能够与该连接进行通信。发送和接收的信息可以用于模拟车辆,查看拥有众多玩家的战场,或允许人工智能与人类玩家进行互动。

API

所有的API都是基于CIGI/DIS/HLS的。

使用

创建一个实例到工程树中

测试

这个适配器最主要的是提供了CIGI通信的功能。

打开示例acf文件

连接设置

从host收端口是8015,发给host端口是8014,设置版本为4.0

Host仿真器设置参数

设置仿真器参数

连接状态

连接状态

这个只是表示端口监听成功,不代表连接成功。

打开Vega Prime程序,连接成功

连接成功

可以正常收到Vega Prime程序发来的信息

接收信息

树木(SpeedTree)模块

Vega Prime集成了SpeedTree模块并提供统一的接口以便使用。

API

  • SpeedGrassControl 草地控制
  • SpeedGrassObject 草地对象
  • SpeedTreeControl 树木控制

用法

  • SpeedTreeControl直接创建一个实例到工程树就可以了。
  • SpeedGrassControl只需要创建一个实例到工程树就可以使用了。
  • SpeedGrassObject需要设置实例的父子对象。

效果

日志(Stat)模块

记录运行数据到本地文件

API

  • StatLogger 日志配置

用法

直接新建一个示例到工程树中就可以使用了。

效果

点击预览运行程序,会在当前目录生成运行日志

生成的日志

日志内容包括每一帧的运行时间、绘图时间、交换缓冲区时间等,可以用来进行性能优化。

仪表(VAPS XT)模块

用于显示仪表,原本Vega Prime有自己的仪表模块,后来通过插件的方式使用GL Studio,在收购了VAPS XT软件后就以VAPS XT作为仪表控件。

现在VAPS XT也不属于Presagis了。

API

  • VAPSXTRendering 渲染设置模块,显示相关设置,比如显示位置
  • VAPSXT 配置VAPS XT相关设置,如dll位置、nCom配置、资源配置

效果

效果操作可以查看Vega Prime入门教程09.01:调用VAPS XT DLL

红外(IR)模块

Ondulus IR的VP接口。

说明

  • 此模块需要安装Ondulus IR软件才会有
  • 此模块(22版)包含Ondulus IR/NVG/LLLTV三个传感器

API

  • OndulusIR 父节点,有且只有一个
  • OndulusIRAtmosphere 红外环境
  • OndulusIRAttribute 属性
  • OndulusIRChannel 红外传感器所在的通道。
  • OndulusIRFXAttribute 特效属性
  • OndulusIRHotSpot 热源,篝火之类的。
  • OndulusIRLightSource 光源
  • OndulusIRMarineAttribute 属性

用法

详见Ondulus IR入门教程07:给场景添加红外传感器

输入(Input)模块

键盘、鼠标等输入设备驱动。

说明

Vega Prime的输入只能在运行时,所以输入测试只能把工程编译为程序。

用法

新建一个类继承vpApp

然后重写onKeyInput(vrWindow::Key key, int mod)函数,内部就是

1
2
3
4
5
6
7
switch(key){
case vrWindow::KEY_d:
break;
default:
vpApp::onKeyInput(key,mod);
break;
}

通过接口获取界面对象以修改数值。

录屏

Vega Prime录屏就是通过键盘实现的。

创建一个类myApp,继承vpApp,重写键盘事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
virtual void onKeyInput(vrWindow::Key key, int mod)
{
switch ( key )
{
...
case vrWindow::KEY_v:
// Remap the key used to capture video
vpApp::onKeyInput(vrWindow::KEY_F8, mod);
break;
default:
vpApp::onKeyInput(key, mod);
break;
}
}

就是自定义一个按键,然后将其映射为F8。

LP模块

LP是VP的图像化开发工具,界面部分应该是基于Qt。VP的库要比LP丰富,毕竟不是所有的功能都可以图形化。

基于LP的界面开发详见Vega Prime入门教程13.04:模块界面

lp dll
vp dll
lp模块vp模块功能说明
gcfGUI Configuration File
audioaudio音频
bwibuildings with interiors
有内饰的建筑
cameracamera摄像头、记录仪
cdbcdb通用数据库
coordsyscoordsys坐标系统
dbmDatabase Management
数据库管理器
diguydiguy专业人员仿真器
entityentity实体
envenv环境
太阳、云朵、闪电、月亮
fxfx特效
input_trackdVR设备输入
input标准输入
鼠标、键盘
ladbmladbm大范围数据库
lightlobelightlobe光照模拟
marinemarine海洋模拟
motionmotion运动模拟
overlayoverlay遮盖
path路径
rtpRuntime Publisher
使用LADBM把CDB发布出去
shadowshadow阴影模拟
silverliningsilverlining支持Silverlining云朵和天空模块
simsimSIM适配器
VP用来收发CIGI/DIS/HLA信息
simhlapresagisfomsimhlapresagisfomsim hla presagis fom,
speedtreespeedtree加载SpeedTree树木模型
statstat数据统计模块
testtest测试
vapsxtvapsxt加载VAPS XT仪表
vtvt加载虚拟纹理

交流群

群主是《Vega Prime实时三维虚拟现实开发技术》和《Vega Prime虚拟现实开发技术》的作者王孝平。

343321154