徐 敏,陳先橋,王 宇
(武漢理工大學計算機科學與技術學院,湖北武漢 430063)
內河河道水深與季節(jié)密切相關,枯水期船舶航行時通航壓力大、危險大,船舶容易發(fā)生擱淺事故,造成巨大的人員及經(jīng)濟損失。將河道地形三維可視化,不僅可幫助測量人員直觀地查看河床地形,同時還可幫助河道管理人員隨著季節(jié)變化發(fā)出水深通告,預防擱淺事故的發(fā)生,避免人員與經(jīng)濟損失。如何根據(jù)真實的數(shù)據(jù)快速有效地生成河床三維地形、河水平面及波浪的仿真成為內河船舶航行三維仿真技術的關鍵。
在如何實現(xiàn)河床的三維可視化問題中,河海大學、天津航道局利用OpenGL基本函數(shù)編程技術開發(fā)了三維河床地形可視化系統(tǒng)。該系統(tǒng)利用離散數(shù)據(jù)風格化算法、三維地形建模及真實感圖形繪制等過程實現(xiàn)了河床地形的可視化。但該研究過程繁瑣,無法快速實現(xiàn)利用現(xiàn)有數(shù)據(jù)生成三維可視化顯示[1]。在波浪仿真方面,PEACHEY、FOURNIER和童若峰等利用數(shù)學函數(shù)構造出水波的外形,然后使波形隨著時間變化而變化[2];徐迎慶、陳前華和JIANG等基于物理方法利用波浪力學構造出水波的模型。但上述方法應用面狹窄且計算復雜,大多只用于滴水產生的漣漪效果仿真[3-5]。吳獻等提出的一種基于領域傳播的水波模擬方法雖然得到了狀態(tài)變量的演化規(guī)則,但沒有進一步結合粘性流體力學將水質的粘性因素考慮進去且沒有進一步提取出演化規(guī)則的各項比例權重[6-7]。
筆者采用高位圖與OGRE(object-oriented graphics rendering engine)快速實現(xiàn)了河床三維可視化,并利用GPU中的硬件頂點緩存來存放創(chuàng)建的水平面幾何體中所有的頂點數(shù)據(jù),通過綜合考慮粘性流體力學[8-10]與細胞自動機理論,推導出流體平面細胞自動機的演化規(guī)則,確定了演化規(guī)則中的各項比例權重。據(jù)此動態(tài)更新水平面幾何體中各點的高程值,從而實現(xiàn)隨船軌跡的水波效果。同時可以通過對水波各參數(shù)的動態(tài)修改,達到良好的交互性。
OGRE是一個成熟、穩(wěn)定、可靠、靈活、跨平臺,且具有豐富功能的實時3D圖形庫。它同時支持OpenGL與Direct3D,帶有多種管理器,其強大且成熟的材質管理和腳本系統(tǒng),方便了材質的維護,支持對GPU的編程技術,可自動渲染狀態(tài)和進行空間剪裁。其中Terrain場景管理器支持對地形數(shù)據(jù)的渲染及空間剪裁。三維地形生成的流程如圖1所示。
圖1 三維地形生成流程圖
DXF文件是以ASCII方式儲存圖形的順序文本文件,包含了AutoCAD圖形文件的所有信息。DXF文件本質上由代碼及關聯(lián)值對組成。代碼(通常稱為組碼)表明其后值的類型。使用這些組碼和值對,可以將DXF文件組織到由記錄組成的區(qū)域中,這些記錄由組碼和數(shù)據(jù)項目組成。實現(xiàn)具體的高程點信息的提取需要分為兩種情況具體考慮:
(1)地形圖中各圖元中點的高程值Z均為有效數(shù)據(jù),在這種情況下,直接讀取圖元各點的X,Y,Z坐標并寫入文本文件即可。為了確保最終三維模型的準確性,圖元的選取應將常見的圖元點信息取全。CAD原文件中常用的圖元含LWPOLYLINE、CIRCLE、LINE、POINT 及 POLYLINE。
(2)地形圖中各點的高程值Z并不為有效數(shù)據(jù),或由于人為的疏忽大部分點的高程值為0。此時不需要讀取圖中各點的點信息,可換作讀取圖中所有標注的文本信息的點坐標X、Y,并將文本值作為其Z坐標。雖然文本標注的點遠比圖中的圖元點數(shù)據(jù)要少,但圖中大部分的圖元都是通過這些文本標注生成的等高線。
河水平面的構建采用格網(wǎng)模型,構建出一個complexity×complexity大小為 PLANESIZE的格網(wǎng)。格網(wǎng)平面由numFaces個三角面及numVertices個頂點組成。使用硬件頂點緩存存放所有頂點的三維位置坐標、法向量及UV紋理坐標。使用索引緩存存放格網(wǎng)面片的頂點索引。格網(wǎng)模型如圖2所示。
由平面模型可得:
格網(wǎng)上各頂點的值初始化如式(3)所示:vertex[i][j].x=i/complexity × PLANESIZE
圖2 河水平面格網(wǎng)模型
式中:vertex[i][j]為格網(wǎng)上第 i行第 j列處頂點。式(3)是對各頂點三維坐標的初始化,其中當水面平靜時,其高程值為0。
格網(wǎng)上每個小正方形點構成的次序為順時針型,index為索引矩陣,索引初始化偽代碼為:
要實現(xiàn)尾隨船舶的水波就是要確定上述所提出的水平面模型中各頂點的高程值(此處對應為y值)的變化幅度。水平面格網(wǎng)模型中各頂點高程值變化取決于船舶航行時擠壓水平面的程度。為了實現(xiàn)隨船的波浪效果,方法一是根據(jù)筆者將要提出的擠壓水面算法更新格網(wǎng)中相應頂點的高程值,二是每幀動態(tài)更新格網(wǎng)(即更新格網(wǎng)中頂點位置、法向量、UV坐標)。
2.2.1 船舶航行過程擠壓水面算法
筆者提出的算法基本思想是根據(jù)船舶航行點,對本點及由本點及正方片鄰域各點進行按權重更新鄰域各頂點的高程值。正方片模型如圖3所示。點(0,0)為船舶當前航行點。實際生活中,將船舶航行時船頭點擠壓水面力最大權重設為1,周圍的點隨著離擠壓點距離的增大而擠壓力逐漸變小。因此構建的權重為:
圖3 正方片模型
式中:x、y為船舶當前航行點的坐標;addx、addy為距離增量。
對正方片中各點高程值進行修改,正方片鄰域各點的高程值即為權重乘船舶吃水深度,有:
式中:depth為當前船舶吃水深度。
2.2.2 動態(tài)更新水面格網(wǎng)的算法
在實際的水波現(xiàn)象中,隨船舶航行產生的水波與漣漪散開速度、漣漪波間距、水本身的黏滯性及水波周期有關。
當不考慮流體的粘性,即視水波平面為理想流體時,線性化的二維淺水波方程給出了水波高度與波速、時間和水波平面之間的關系,如式(6)所示。
式中:c為波速;h為水波高度;t為時間;xoz平面為水波平面。
式(6)是無耗散的淺水方程,當加入一定的耗散后得到式(7):
其中,k為耗散系數(shù)。水波中各點在任何時刻均需滿足式(7)。
細胞自動機是由一些特定規(guī)則的格子組成的,每個格子看作一個細胞,每個細胞在每一時刻均有一種狀態(tài)且格子上的細胞根據(jù)周圍細胞的狀態(tài)按照相同的法則改變自己的狀態(tài)。它具有并行性、局部性與一致性。這些特性決定了所有細胞受同樣規(guī)則支配,細胞狀態(tài)的變化只受鄰域細胞的影響且所有細胞保持同步更新。將水平面格網(wǎng)中每個節(jié)點均視為細胞,節(jié)點的高程視為細胞的狀態(tài)。設定鄰域細胞為四細胞環(huán)繞,如圖2中細胞 A、B、C、D 環(huán)繞細胞 E。
一階偏導與二階偏導定義為:
整理式(7)后得到式(9):
由于采取的是四細胞環(huán)繞模式,因此n=4;將式(9)展開整理得到式(10):
式(10)即為理想流體水波的自動演化規(guī)則,只要確定t-Δt與t時刻各細胞狀態(tài)的值,即可由此計算出接下來任意時刻的水面高度。
考慮到流體的粘性,由粘性流體力學中不可壓縮流體的Navier_Stokers方程可知,式(10)可進一步推算出式(11),為:
為了簡化演化規(guī)則,進一步分離出各項的比例因子,取Δt為水波的周期T,Δx為水波的波長D,水波的粘性系數(shù)U為耗散系數(shù)。由式(11)易從演化規(guī)則中分離出3個因子,即:
式中:C為漣漪速度;D為漣漪波長;U為流體黏滯性;T為水波的周期。
根據(jù)鄰域傳播思想,各頂點高程值的更新公式為:
筆者給出的所有算法均非常高效,由圖2所示的針對DXF文件的點提取算法只是對文件數(shù)據(jù)的分析及讀寫操作,筆者用到的實驗數(shù)據(jù)是荊州太平口一段長24 km的河道數(shù)據(jù),提取時間僅用10 s。由式(8)更新格網(wǎng)所有頂點的高程值時,只需進行complexity×complexity次運算,時間復雜度為O(n2),完全可以滿足實時動畫的需要。與真實船舶航行過程中產生的水波相比,筆者的水波仿真較為符合實際,如圖4所示。同時可知當水波參數(shù)不同時,產生的水波效果也不同,進一步說明了該仿真具有良好的交互性。所提出的整套方案能快速解決內河船舶航行三維可視化問題。
圖4 內河船舶仿真渲染效果圖
筆者提出的內河船舶航行仿真方案,給出了一種快速生成三維可視化河道的方法及實現(xiàn)水波動畫的一種新算法?;谠摲椒ㄅc該算法,在普通PC機或筆記本電腦上可達到180左右的幀率。完全能滿足一般實時渲染的要求,效果良好。
[1]辛海霞,呂秋靈,龐啟秀.三維河床地形可視化瀏覽系統(tǒng)研究與實現(xiàn)[J].計算機仿真,2006(12):179-182.
[2]童若鋒,汪國昭.用于動畫的水波造型[J].計算機學報,1996,19(8):594-599.
[3]徐迎慶,蘇成,李華,等.基于物理模型的流水及波浪模擬[J].計算機學報,1999,21(增刊):153-159.
[4]陳前華.滴水漣漪的計算機動畫模擬[J].計算機研究與發(fā)展,2001,38(5):524-528.
[5]JIANG Z D,MA L Z,SHI J Y.A physically-based approach to water modeling[C]//Proc the 6thInternational Conference on CAD & Computer Graphics.[S.l.]:[s.n.],1999:675-681.
[6]楊懷平,胡事民,孫家廣.一種實現(xiàn)水波動畫的新算法[J].計算機學報,2002,24(6):612-617.
[7]吳獻,董蘭芳,盧德唐.一種基于鄰域傳播的水波模擬方法[J].中國科學技術大學學報,2010(3):278-282.
[8]夏震寰.現(xiàn)代水力學[M].北京:高等教育出版社,1992:65-98.
[9]ADAM L,ARNON P.Real-time shallow water simulation with opencl for CPUs[EB/OL].[2011-08-09].http://www.khronos.org/developers/library/2011_GDC_OpenGL/Intel-OpenGL-Water-Sim_GDC-Mar11.pdf.
[10]LO M H,JAMES S F.Improving parameter estimation and water table depth simulation in a land surface model using GRACE water storage and estimated base flow data[J].Water Resources Research,2010(5):15-17.