黄诗物+李建微+林建德
【摘 要】 林火蔓延的三维模拟是目前关于林火蔓延研究中的一个重点,而虚拟林火场景的创建与编辑是实现三维化模拟的一个非常重要的部分。本文详细分析了林火蔓延系统对于场景编辑功能的需求,采用多种软件设计方法以及开源技术设计并实现了模拟系统中的场景编辑功能,并能与模拟系统的其他部分良好协作实现林火蔓延的三维模拟。
【关键词】 林火蔓延 三维模拟 场景编辑
林火蔓延是指从森林可燃物起火开始,燃烧扩散并最终熄灭的过程[1]。科学家们研究了各种相关因子(如可燃物、气象和地形等)与林火的定量关系,构建出林火蔓延模型,并在此基础上对林火蔓延过程进行模拟研究,已有一些二维模拟系统比如美国农业部林务局的FARSITE[2]和BEHAVE系统在国外获得较多的应用。目前在林火蔓延模拟方面的研究由主要针对地表火和林火起始阶段的二维模拟,发展为针对三维、立体的林火蔓延模拟[1][8]。本文针对此研究领域开发了一个基于FARSITE的林火蔓延三维模拟系统,该三维模拟系统以FARSITE的核心模型作为林火蔓延边界的模拟基础,利用虚拟现实技术、三维地理信息系统技术等实现三维场景创建编辑功能以构建一个逼真的虚拟森林场景,模拟三维的林火蔓延过程。
三维场景编辑器是用来搭建三维系统中的场景,是为了给使用者提供一个能够自由创建三维场景的平台。一般三维场景编辑器都集成了模型、地形、光照、天空盒、水面、粒子系统等三维编辑功能,并且具备整个系统的数据信息和数据管理功能[4][5]。
1 系统场景编辑功能需求
由于本文讨论的是三维林火蔓延仿真系统中的场景编辑功能模块的设计与实现,因此需要根据这一特定应用的特殊需求在目前通用的三维场景编辑器的设计与实现之上进行功能裁剪与修改,使得较为通用的三维场景编辑技术能够满足本系统特定的需要。虚拟林火场景是现实世界中林火真实环境的模拟抽象,为进行林火蔓延模拟提供基础环境。虚拟林火环境包括众多要素,主要包括地形三维可视化、植物三维建模和林火三维可视化[8]等三个方面的内容。因此具体来说本文构建的林火蔓延仿真系统对于场景编辑方面的需求主要有:
(1)三维地形的载入与构建。由于本系统要求具有较高的仿真度,因此要求可以直接使用所研究林区的真实三维地形。这可以通过使用林区的高程图以及卫星遥感图通过本系统使用到的OSG三维渲染引擎[6]的一个地形数据库生成工具VirtualPlanetBuilder(VPB)[6]生成,然后进行地形的载入。(2)虚拟植物的创建。森林中的可燃物是林火发生的重要物质基础,林火蔓延的主要影响因素之一。虚拟植物的创建包括树木、灌木、草丛等的渲染,植物的种类与分布反映了该区域的森林可燃物的类型和分布。目前虚拟植物建模方法很多,如参数化单株木三维建模、过程植物建模、基于图像三维建模、基于草图建模及交互式建模等方法。综合考虑场景的真实感和绘制速度,项目目前采用Billboard方法创建植物模型。(3)林火是虚拟森林火灾场景的主要模拟对象。林火模拟包括火焰和烟雾的模拟。由于火焰的形状和颜色的变化是不规则地动态变化的,因此对其的模拟至今仍没有完美的解决方案[9]。目前,对火焰的模拟方法主要有以下几种:基于粒子系统的方法、基于纹理的方法及基于数学物理的方法[10]。本系统使用OSG三维渲染引擎的粒子系统[11]来进行火焰和烟雾的模拟。
2 总体框架与设计方法
本文开发的林火蔓延三维模拟系统使用QT图形界面库[7]实现模拟系统界面的快速设计和消息通信机制。使用OSG三维渲染引擎的应用框架实现三维模拟场景世界的实时显示,通过调用其接口实现功能设计。而要实现对三维模拟场景的编辑工作除了采用上面的两个重要的编程设计工具之外还使用了XML技术,XML格式文件用于保存编辑的场景数据信息,使用XML解析器TinyXml库读取和重现场景。总体框架如图1所示。
本项目使用统一建模语言UML对场景编辑模块中的类进行建模,直观体现出对象、接口、协作和它们之间的关系。根据面向对象的分析和UML建模图,运用单例模式、对象工厂模式等设计模式,设计各个对象类、对象间的层次关系和继承关系、对象间的通信方式等,见图2。
最后便是面向对象编码的实现,详细对各个对象类进行编码,封装对象数据及相关操作。并适时地对类进行重构,调整系统的结构,改善代码,减少代码冗余,提高程序的效率,使以后的拓展更加的容易。
3 详细功能设计与实现
3.1 界面操作
界面操作功能由界面接口模块来实现。界面接口模块划分为界面框架模块和工作区功能模块。其中界面框架结构图如图3所示。工作区功能模块再划分为场景渲染模块、资源管理列表模块、模型视图模块、地形编辑模块、日志模块、和属性模块(这里列出的是涉及到场景编辑功能的子模块)。除了场景渲染窗口外,本系统以Dock窗口形式来设计其他五部分,它们可以隐藏和显示,还可以依赖于主窗口或悬浮独立。当所有的Dock窗口都隐藏或处于悬浮状态时,场景渲染窗口将扩充到整个工作区来显示当前的场景。
3.2 实体编辑
场景编辑必须能够快速的创建实体,实体的编辑功能主要由实体编辑模块实现。场景实体接口不仅提供对场景中所有实体的基本的操作功能,如平移、锁定、删除等,还提供了获取实体状态、状态操作、光线图实时渲染。其中模型实体接口是对模型实体编辑的功能;地形编辑接口提供了对地形编辑的功能;而其他实体模块主要是场景编辑中的一些基础的实体,比如摄像机,天空,光源等。
3.3 场景管理
编辑场景时还必须提供对场景信息的管理功能,因此需要设计场景管理模块。场景管理模块主要用来管理编辑器的各种数据,包括界面数据和场景编辑时数据的管理。场景管理模块四大部分:模型管理模块、日志模块、属性模块和场景存储模块。