黃詩物+李建微+林建德
【摘 要】 林火蔓延的三維模擬是目前關于林火蔓延研究中的一個重點,而虛擬林火場景的創建與編輯是實現三維化模擬的一個非常重要的部分。本文詳細分析了林火蔓延系統對于場景編輯功能的需求,采用多種軟件設計方法以及開源技術設計并實現了模擬系統中的場景編輯功能,并能與模擬系統的其他部分良好協作實現林火蔓延的三維模擬。
【關鍵詞】 林火蔓延 三維模擬 場景編輯
林火蔓延是指從森林可燃物起火開始,燃燒擴散并最終熄滅的過程[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 場景管理
編輯場景時還必須提供對場景信息的管理功能,因此需要設計場景管理模塊。場景管理模塊主要用來管理編輯器的各種數據,包括界面數據和場景編輯時數據的管理。場景管理模塊四大部分:模型管理模塊、日志模塊、屬性模塊和場景存儲模塊。