Vega Prime视景仿真软件API简介
来源:第三维度 作者:王乘 李利军 周均清 陈大炜
本文节选自《Vega 实时三维视景仿真技术》
Vega 是一套完整地用于开发交互式、实时可视化仿真应用的软件平台,其最基本的功能是驱动、控制、管理虚拟场景并支持快速复杂的视觉仿真程序,快速创建各种实时交互的三维环境,快速建立大型沉浸式或非沉浸式的虚拟现实系统。从整体上而言,Vega 具有如下特点:易用性、高效性、集成性、可扩展性、跨平台性。
一、Vega 应用程序的实现架构
从Vega软件系统的底层实现框架来看,Vega实际上是建立在特定的场景图(Scene Graph)之上的,而场景图管理系统本身又建立在诸如 OpenGL 这样的标准图形库之上。所谓的场景图,是从数据结构的角度来看场景数据的,这里的“图”是指队列、树、图等数据结构术语中的图,具体而言是一种有向无环图(Directed Acyclic Graph,DAG)。这个有向无环图就被称为“场景图”。场景图从整体上描述了虚拟场景中各个元素之间的相对位置及其相互关系。
场景图由各种节点组成,一般来说,场景中的模型对象用场景图中最下层的叶节点描述,而这些叶节点上层的各种节点则负责完成包括定位、显示或隐藏模型对象、对节点分组等在内的各种功能,实际上对虚拟场景实时仿真的过程就是对场景图节点进行特定方式的遍历绘制。
在 SGI 平台上,Vega 所依附的场景图管理系统就是 Performer,而对于 Windows 平台而言,Vega 所依附的是由 Multigen-Paradigm 专门针对 NT 平台开发的一套被称为“Jolt”的场景图管理系统。Jolt 系统成功地在 PC 平台下扮演了 Performer 的角色,这不仅提高了 Vega 的通用性,而且也大大降低了用户的使用成本。有过 Performer 开发经验的读者会发现,Vega 跟 Performer 非常相似,实际上 Vega 基本上继承了 Performer 的大部分功能并做了一定的扩展,它提供了一个专门的图形界面应用程序定义文件编辑器——LynX,从而大大降低了程序代码编写工作量。
图1 Vega 应用程序实现架构示意图。
二、OpenGL 应用程序与 Performer 函数库
1. OpenGL
OpenGL 不是一种计算机编程语言,而是一个功能强大的图形库(Graphics Library),本质上就是计算机图形硬件的软件接口。OpenGL 图形库中包含了大量功能强大的图形函数,集成了所有曲面造型、图形变换、光照、材质、纹理、像素操作、融合、反选择、雾化等复杂的计算机图形学算法。对于计算机图形应用开发人员来说,OpenGL 就是一套独立于硬件设备、窗口系统和操作系统的应用程序编程接口(API)。图2 所示为一个典型的基于 OpenGL 的应用程序系统架构。
图2 OpenGL 应用框架
图形标准或图形应用程序编程接口在图形应用领域有着重要的地位,它不仅加速了图形应用程序尤其是三维图形应用程序的开发,而且还使得图形应用程序具有更好的移植性;历史上曾出现的图形标准(或 API)包括 Core、GKS、PHIGS、PEX、GL、Dore、RenderMan、Hoops、OpenGL 等等。经过竞争与淘汰,OpenGL 成为国际上公认的 3D 图形工业标准,在Unix 与 PC 平台得到广泛应用。OpenGL 的前身是 SGI 公司为其图形工作站设计的一个图形开发软件库 IRIS GL。凭借其优越的图形性能,IRIS GL 受到了计算机图形业界的一致推崇。
但由于 IRIS GL 不是一个开放的标准,它只能在 SGI 公司的图形工作站上运行,所以限制了其进一步发展和应用。SGI 公司有针对性地对 GL 进行了改进,特别是扩展了 GL 的可移植性,使之成为一个跨平台的开放式图形编程接口,从而演变成现在的 OpenGL。目前,已有相当多的计算机行业软硬件厂商和相关研究机构都支持 OpenGL 作为业界标准的图形软件接口,并且由一个包括 SGI 公司和 Microsoft、Intel、IBM、Compaq、DEC 等在内的软、硬件制造商成立的OpenGL体系结构评审委员会(OpenGL Architecture Review Board,OARB)负责管理和完善 OpenGL 规范,从而充分保证了 OpenGL 的独立性、开放性、前瞻性、可靠性、稳定性、兼容性和可扩展性。
OpenGL 实现的主要功能包括以下几种。
(1) 几何建模:OpenGL 提供绘制点、线、多边形等几何图元的函数,通过这些基本函数可以绘制出任意的二维和三维物体,同时 OpenGL 图形库还提供了诸如球体、锥体、多面体,甚至茶壶等复杂三维物体模型以及 Bezier、NURBS 等复杂曲线和曲面的绘制函数。
(2) 坐标变换:OpenGL 提供了基本的模型平移、旋转、缩放、镜像变换操作函数,以及用于投影变换的正射投影和透视投影变换函数,通过这些函数来放置三维场景中的物体,并实现从三维场景到二维图像的变换。
(3) 颜色模式:OpenGL 支持 RGBA 模式和颜色索引(Color Index)两种不同的颜色模式,两种颜色模式有各自的运用范围,具体采用哪种颜色模式,可以根据具体的应用需求和运行平台的图形硬件配置来选择。
(4) 光照模拟:OpenGL 支持环境光(Ambient Light)、漫反射光(Diffuse Light)、辐射光(Emitted Light)、镜面光(Specular Light)四种常见光源以及多种光照模型,可以逼真地模拟出各种真实的光照效果。
(5) 材质模拟:OpenGL 用光的反射率来表示物体的材质,材质和光照一起决定了人眼所观测到的物体的颜色,物体的材质特性直接影响三维物体的最终绘制效果。
(6) 纹理映射:OpenGL 的纹理映射功能允许把真实图像映射到三维物体的表面来表现物体的细节,通过多种不同的纹理映射方式,可以逼真地绘制出足以乱真的三维物体。
(7) 位图绘制:OpenGL 提供对位图和图像的绘制渲染函数,可以方便地生成各种字符、字体。另外,图像不仅可以直接被绘制到屏幕上,还可以将其作为纹理映射到物体表面上。
(8) 图像增强:OpenGL 除了支持基本的图像显示和绘制功能外,还特别支持融合(Blending)、反走样(Antialising)、雾化效果(Fog)等多种图像增强功能,能够使绘制的三维图像产生真实感极强的视觉效果。
(9) 平滑动画:OpenGL 可利用各种帧缓存技术,尤其是双缓存技术,从而能够生成平滑的连续动画效果,即把帧缓存分为前台缓存和后台缓存,分别负责绘制图像和显示图像,并能在动态渲染的过程中互相交换。图 3 所示为 OpenGL 的基本工作流程。
图3 OpenGL 的基本流程
作为标准的图形软件接口,OpenGL 提供了数百个库函数,可以方便地绘制具有真实感的二维和三维图形;但由于 OpenGL 与窗口系统无关,不提供任何交互手段,所以必须由程序员自己编写所有的交互功能。另一方面,OpenGL 的编程接口是低级的 C 函数,不提供可复用的对象库或者应用程序框架,所以直接使用 OpenGL 开发交互式应用程序的工作效率并不高。
许多软件厂商鉴于 OpenGL 强大的图形处理能力,在不同的应用领域中相继开发出众多基于 OpenGL 的图形应用软件产品,其中比较著名的软件产品包括:用于三维动画制作的软件——Maya、SoftImage 3D;用于视景仿真建模的软件——Multigen Creator;用于可视化仿真驱动的软件——World Tool Kit、VTK;用于计算机辅助设计和制造的软件——Pro Engineer、Alias Studio Tools;用于地理信息系统的软件——Arc/Info 等等。同时,SGI公司也不断推出以 OpenGL 为基础的高级开发工具包,以满足对图形工具性能日益增长的需求,这些高级图形开发工具包包括 Cosmo3D、Open Inventor、OpenGL Performer(可视化仿真驱动软件)、OpenGL Optimizer(高端图形应用工具箱)等等。
2. Performer
OpenGL Performer 最初是 SGI 公司开发的一个可扩展的高性能实时三维视景开发软件包,它提供了一套完整的、用 C/C++语言写成的应用程序接口,并且可以与 IRIS GL 和OpenGL 相连接,可以运行于所有的 SGI 图形计算机使用的 IRIX 操作系统之上。OpenGL Performer 根植于图形化的 IRIX 操作系统,能够充分发挥 SGI 图形硬件的强大图形功能,因而具有超强的视景生成能力,并广泛应用于可视化仿真、虚拟现实、视频广播、游戏娱乐以及计算机辅助设计等领域。图 8 所示为 OpenGL Performer 的一个简单应用示例。
图4 OpenGL Performer 视景仿真应用示意图
由于从 OpenGL Performer 诞生之日起就没有提供良好的用户可视化编程界面,所以对用户提出了较高的编程能力要求,对于非程序员而言比较难适应。另一方面,OpenGL Performer 开始只能运行于 SGI 平台下,一度限制了其推广和发展。最近 SGI 公司在新推出的 OpenGL Performer 3.0 版本中特别提供了 PC 平台下的版本,在可以预见的未来,OpenGL Performer 的应用前景必将更加广阔。图 9 所示为 OpenGL Performer 函数库的架构。
图5 OpenGL Performer 函数库架构
OpenGL Performer 提供的主要函数库包括以下几种。
(1) 高性能渲染函数库(libpr):提供专门针对实时图形应用优化的高性能渲染功能,支持高速的几何体渲染、高效的图形状态管理控制、复杂的光照模拟和纹理映射、简化的窗口创建和管理、立即模式和显示列表模式绘制、相交测试、共享内存管理、非同步的输入输出控制和其他基本绘制功能。
(2) 可视化仿真开发库(libpf):提供众多高级的可视化仿真应用功能,支持多图形管道、多窗口多通道配置、高效的场景图创建和实时修改、多进程并行处理、非同步的数据库分页调度、系统紧张度和加载管理、层次细节模型的平滑转换、动态和静态坐标系、固定帧频率和其他视觉效果增强功能。
(3) 几何体构建工具库(libpfdu):提供了创建基本几何图形的工具,可以大大优化数据库加载器(Loaders)和转换器(Converters)的创建过程。
(4) 实用工具函数库(libpfutil):提供了可视化仿真常用的实用工具,包括鼠标控制、简单而高效的用户界面、场景图遍历工具,特别提供了视频纹理支持和烟火效果的模拟。
(5) 用户接口函数库(libpfui):提供了用户与仿真应用程序之间进行交互的接口函数,包括各种常用的运动模式和碰撞检测模型。
(6) 图形化察看器函数库(libpfv):提供了对基于 XML 规范格式文件的读写功能,可以方便地设定复杂的显示配置,并能创建带三维形式元素的用户界面,甚至可以同时支持多个虚拟场景和观察者。
(7) 配置信息输入函数库(libpfmpk):用户使用该函数库可以导入 OpenGL Multipipe SDK 配置文件格式的配置信息,还可以将 Performer 的各种配置信息写成特定格式的文件备用。
(8) 数据库加载函数库(libpfdb):提供了通用的读取模型数据库的软件接口函数,支持多种格式的三维模型数据,设置提供了自定义加载函数的模板源代码。
三、Vega API 的基本结构
Vega 提供的众多功能都被封装在用 C 语言定义的类中,每个 Vega 类都是一个完整的、能够实现对应功能的,各种控制方法和表现属性的集合,这些可以在应用程序中调用的、相互关联的类的集合构成了 Vega 类库。所以以程序员的观点来看,Vega 的核心就是用于控制虚拟仿真环境的应用程序编程接口,主要包括 Vega 开发函数库和 Vega 实用函数库两个类库(见表1)。
表1 Vega 常用类库
为了满足不同的开发目的,所有的 Vega 类库都提供了多种形式的版本,以 Windows 平台下的 Vega 开发函数库为例:
psVg.dll 和 psVg.lib —— 以优化过的共享动态链接库(DLL)形式提供;
psVgD.dll 和 psVgD.lib —— 以调试版本的共享动态链接库形式提供;
psVgS.lib —— 以优化过的静态类库形式提供;
psVgDS.lib ——以调试版本的静态类库形式提供。
不论类库以哪种形式提供,它都会包含完整的 Vega 类,Vega 开发函数库的核心类如表2 所示。
表2 Vega 核心类
上一篇:Vega LynX Prime 编辑器概览[ 11-29 ]
下一篇:基于ArcGIS创建三维虚拟城市流程[ 12-20 ]