一種基于osg三維引擎的海陸接合可視化方法
【技術領域】:
[0001] 本方法涉及一種使用OSG三維渲染引擎,將海洋與陸地同時進行可視化的解決方 案;特別涉及使用VPB生成大規模地形模型,并在場景中加入海洋的大規模場景,屬于圖形 可視化技術領域。
【背景技術】:
[0002] 三維場景的可視化是多年以來計算機圖形學,尤其是虛擬現實領域所研究的熱點 與重點。近幾年來,大規模地形的繪制成為了大量論文與期刊的熱門話題,在大規模地形的 基礎上,將海洋加入場景內,即海陸同時進行可視化是各個三維仿真平臺都需要重點實現 的功能之一。
[0003] OSG三維渲染引擎是一款渲染效率高、開源的可視化編程工具包。利用OSG所提供 的API,可以快速高效地完成三維場景的建模。VirtualPlanetBuilder簡稱VPB,是一款 基于OSG的大規模地形建模插件,通過配置VPB的命令行參數,可以將已有的地形高程數據 與紋理數據處理生成OSG可直接解析的三維模型,存儲為IVE格式。使用如上所述的OSG 三維渲染引擎與VPB大規模地形繪制插件,可以快速地將大規模地形進行可視化。
[0004] 然而,大規模地形通常用于陸地可視化,可以很好地表現出山脈丘陵、地表起伏的 信息,而海洋的部分則只是簡單的貼圖。為了將海洋與陸地同時進行可視化,通常需要在已 經繪制完成的大規模地形場景中單獨加入海洋節點,這就帶來一個問題:當攝像機在三維 場景中漫游,并且視點距離海陸場景很遠時,海洋與陸地的繪制深度會變得越來越接近,以 至于海洋有時會蓋過陸地、有時低于陸地,產生不合理的海陸頻繁閃動的可視化效果,在此 將此問題簡稱為海陸頻閃問題。
[0005] 目前解決頻繁閃動問題的方法有兩種:其一避免視點高度過高,大多數應用并不 需要視點與場景保持很遠距離,可以通過限制視點高度避免海陸頻閃問題;其二使用海陸 交接線的檢測算法,即實時計算海岸線,此種方法從根本上解決了海陸頻閃問題,但是計算 代價很高,很大程度影響了場景繪制效率。
【發明內容】
:
[0006] 本方法的目的是針對以上所述的海陸頻閃問題,提出一種基于OSG三維渲染引擎 進行場景建模、使用VPB生成大規模地形模型的海陸同時可視化的解決方案。該方案在一 個場景中同時加入大規模陸地節點與海洋節點,根據視點高度動態調整海洋的高度,使得 視點遠離海陸場景時,海洋與陸地的深度緩存相差不會過小,從而避免海陸頻閃的問題。
[0007] 大多數三維場景需要集中觀察的是陸地模型,并不需要過分強調海面細節。所以 在陸地模型優先于海洋模型被觀察時,可以適當降低海洋高度增加海陸二者的深度緩存。 根據測試,使用如下的公式作為海洋高度調整的數學模型較為合理。
[0008]
[0009] 其中,W為海陸場景規模,H。為初始化海洋繪制高度,distance為視點距離海陸場 景的高度,h為海洋波浪高度。需要說明的是,該解決方案中所使用的海洋顯示方案為動態 海洋,陸地模型為靜態陸地。即隨著視點移動,陸地模型位置不會變化,但是海洋中心會隨 著視點移動而移動,使得海洋中心始終處于視點在地表投影的位置。當視點遠離地表時,陸 地模型會進行縮放變得越來越小,海洋模型大小不會改變。實驗測試當視點高度達到5/6 場景大小時,海陸場景細節已經變得足夠模糊,海洋已不需要進行顯示。當海洋高度降低h 時,海洋已處于地平線之下,此時如果有海洋貼圖則移除海洋節點,不再繪制動態海洋;如 果無海洋貼圖則海洋高度不再改變。此時三維場景不會發生海洋與陸地頻繁閃動的問題。
[0010] 如果需要集中觀察海面細節,可以適當升高海洋高度增加海陸二者的深度緩存。 此時將公式中的減號換為加好即可,即:
[0011]
[0012] 本發明的目的是通過以下技術方案實現的:
[0013] -種使用OSG三維渲染引擎,將海洋與陸地同時進行可視化的方法,包括以下步 驟:
[0014] 步驟一、使用OSG三維渲染引擎進行三維場景框架搭建。
[0015] 步驟二、使用地形建模插件,如VPB,生成大規模地形模型文件。將已有的地形高程 數據與紋理數據作為輸入,通過配置VPB命令行參數,輸出大規模地形的ive模型文件。
[0016] 步驟三、使用海洋繪制插件,如osgocean,生成海洋節點,將海洋節點與地形模型 文件同時加載入OSG的場景樹中進行可視化。
[0017] 步驟四、如果海洋繪制插件繪制出的海洋節點不會跟隨視點移動而移動,設置海 洋節點為動態節點。即設置海洋繪制范圍為固定大小,在OSG漫游器的鍵盤回調函數中設 置海洋中心坐標為視點坐標。
[0018] 步驟五、設置海洋高度隨視點高度動態變化,然后根據海洋高度進行海洋場景顯 不。
[0019] 步驟5. 1在三維場景中加入漫游器,比如trackmanipulator等。
[0020] 步驟5. 2修改漫游器的縮放回調函數,比如OSG自帶的trackmanipulator漫游器 中的zoommodel函數,將數學模型中的distance值賦為類成員變量_distance。對數學模 型各個變量進行初始化。在回調函數中按照上述公式(1)或(2)設置海洋高度值,公式(1) 是針對著重觀察陸地模型時的情況,公式(2)是針對著重觀察海洋效果時的情況。
[0021] 步驟5. 3根據計算得到的海洋高度值,區分如下情況進行顯示:
[0022] i.如果地形建模插件所繪制出的地形模型中的海洋部分有貼圖,則distance增 長到5/6W之后,海洋節點不再顯示,只顯示貼圖即可。
[0023] ii.如果地形建模插件所繪制出的地形模型中的海洋部分沒有貼圖,則distance 增長到5/6W之后,海洋節點繼續顯示,高度不再發生變化;此時視點高度已足夠高,距離海 陸模型也已足夠遠,不需要從更遠的地方觀察整個三維場景,可以限制視點高度最大值為 5/61
[0024] 通過以上步驟就可以繪制出海洋與陸地同時進行顯示的三維場景,并且此場景在 視點遠離場景時,不會發生海陸頻繁閃爍的問題。
[0025] 一種使用OSG三維渲染引擎,將海洋與陸地同時進行可視化的裝置,包括海陸三 維場景繪制模塊與海洋高度隨視點高度動態調整模塊。繪制模塊在程序初始化時就已完 成,高度調整模塊在圖形界面可視化時不斷循環直至程序退出。
[0026] 所述海陸三維場景繪制模塊用于使用OSG三維渲染引擎繪制產生場景,并且使用 VPB生成大規模地形模型;
[0027] 所述海洋高度調整模塊用于在每次視點位置發生變化時,按照前述公式(1)或公 式(2)調整海洋高度,并按照調整后的海洋高度進行海洋場景顯示。
[0028] 所述大規模地形模型中可能包括海洋部分,表現為海洋貼圖,或者不包括海洋而 只有陸地起伏的部分。陸地加載到場景中為靜態陸地,即陸地位置與大小不會隨著視點的 變化而變化;海洋加載到場景中為動態海洋,不論視點移動到哪里,海洋中心始終與視點坐 標相同。
[0029] 所述海洋高度的調整在漫游器的視點位置變化的回調函數中實現,比如 zoommode 1函數。
[0030] 有益效果:
[0031] 在海洋與陸地同時顯示的三維場景中,以較簡單的方式避免了視點高度過高時海 洋與陸地頻繁閃動的問題,同時保證了場景繪制的效率。
【附圖說明】:
[0032] 圖1為本發明實施例一種基于OSG與VPB的陸地與海洋同時顯示的三維場景繪制 流程示意圖;
[0033] 圖2為一般視點下的海陸三維場景示意圖;
[0034] 圖3為一般視點下的海陸三維場景的各個參數,繪制幀率大約在7~10之間。
[0035] 圖4為未采用本方法時視點過高時的海陸三維場景示意圖,圖中方形框標識處有 頻閃問題。
[0036] 圖5為未采用本方法時視點過高時的海陸三維場景各個參數。
[0037] 圖6為采用本方法時視點過高時的海陸三維場景示意圖,方形框標識位置頻閃問 題已經被解決。幀數穩定在7-10之間。
[0038] 圖7為采用本方法時視點過高時的海陸三維場景各個參數。
[0039] 圖8為未采用本方法時視點過高時的海陸三維場景與參數,更大范圍的地形更可 以看出頻閃問題的存在。
[0040] 圖9為采用本方法時視點過高時的海陸三維場景與參數,圖8與圖9的對比可以 清楚看出頻閃問題被解決。
[0041] 圖10為采用本方法時視點最高時的海陸三維場景與參數。視點足夠遠離場景后 則只加載海洋貼圖,不再加載海洋繪制節點。幀數依然在7~10之間。此時視點高度達到5/6W最大值。
【具體實施方式】:
[0042] 下面將結合附圖和實施例對本發明加以詳細說明,同時也敘述了本發明技術方案 解決的技術問題及有益效果,需要指出的是,所描述的實施例僅旨在便于對本發明的理解, 而對其不起任何限定作用。
[0043] 實施例1
[0044] 如圖1所示為本發明實施一種使用OSG三維渲染引擎,將海洋與陸地同時進行可 視化的解決方案流程示意圖,下面對流程中的步驟進行詳細描述:
[0045] 步驟一、使用OSG三維渲染引擎進行三維場景框架搭建。
[0046] 分別建立地形節點與海洋節點,掛載到OSG場景樹根節點中。示例代碼如下:
[0047] osgViewer::Viewer viewer;
[0048]osg: :Group*root=newosg::Group;// 建立根節點
[0049] root_>addChild (scene_&