林火蔓延三维模拟系统中场景编辑的设计的相关
林火蔓延是指从森林可燃物起火开始,燃烧扩散并最终熄灭的过程[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 场景管理
编辑场景时还必须提供对场景信息的管理功能,因此需要设计场景管理模块。场景管理模块主要用来管理编辑器的各种数据,包括界面数据和场景编辑时数据的管理。场景管理模块四大部分:模型管理模块、日志模块、属性模块和场景存储模块。
3.4 数据可持续化
本系统中场景的保存和读取使用的是TinyXml解析器。TinyXml是一个开源的解析XML的解析库,通过对XML文件的解析,在内存中生成DOM模型,就可以很方便地遍历整棵XML树。它小巧且简单易用,很适合于存储简单的数据,配置文件等数据量不大的操作。
3.5 场景编辑实现展示
笔者在win7的VS2008平台下使用C++语言编程实现了如上所述的模拟系统的场景编辑功能,创建了较为逼真的虚拟林火场景并能够与系统的其他模块良好协作实现了林火蔓延的三维模拟,达到了预期的效果,如图4所示。
4 结语
本文详细论述了林火蔓延三维模拟系统的场景编辑功能的设计与实现过程,并且能够看到所设计实现的场景编辑功能模块较好地与系统的其他功能模块一起实现林火蔓延的三维模拟,但是就目前所实现的效果来看还不够逼真细腻,还有一些技术难题以
及细节问题需要进一步处理和解决,之后的工作将继续进行学习研究努力实现更为真实的模拟效果同时也会在蔓延模拟的精度上继续提升,以更好地为林火管理服务,减少林火造成的人员和财产损失。
参考文献:
[1]唐晓燕,孟宪宇,易浩若.林火蔓延模型及蔓延模拟的研究进展[J].北京林业大学学报,2002,24(1):87-91.
[2]吴志伟,贺红士,胡远满,等.FARSITE火行为模型的原理结构及其应用[J].生态学杂志,2012,31(2):494-500.
[3]陈崇成,李建微,唐丽玉,等.林火蔓延的计算机模拟和可视化研究进展[J].林业科学,2005,41(5):155-162.
[4]唐毅.3D游戏场景编辑器的设计与实现[D].四川:西南交通大学,2010.
[5]周军.基于OGRE的3D教育网络游戏场景编辑器的设计与实现[D].广州:中山大学,2009.
[6]BLANCHETTE Jasmin,SUMMERFIELD Mark.C++ GUI Qt4编程[M].闫锋欣,曾泉人,张志强,译.第二版,北京:电子工业出版社,2008.
[7]肖鹏,刘更代,徐明亮.OpenSceneGraph三维渲染引擎编程指南[M].北京:清华大学出版社,2010.
[8]李建微,陈崇成,於其之,等.虚拟森林景观中林火蔓延模型及三维可视化表达[J].应用生态学报,2005,16(5):838-842.
[9]李建微,陈崇成,唐丽玉,等.基于粒子系统的林火实时绘制研究及实现[J].中国图像图形学报,2005,10(9):1161-1165.
[10]王继州,顾耀林.火焰模拟方法的研究综述.中国图象图形学报[J],2007,12(11):1961-1970.