呂文磊 李智生 夏光輝



摘 要:利用基于Windows 平臺的全參數化特征造型軟件SolidWorks繪制水下作業平臺及水下實況觀測設備、水下觀測目標的三維立體模型,利用Deep Exploration專業圖形格式轉換軟件將3D模型轉換成OpenGL庫函數可讀取的數據列表格式,在OpenGL圖形開發環境中進行了3D模型材質顏色設計、水下觀測設備視場設計和3D場景的光照、漫游、縮放、旋轉等功能設計,并在基于VC++2010的MFC軟件開發平臺下構建軟件程序框架,設計出一套水下作業觀測記錄系統布局人機交互的可視化仿真軟件,軟件實現了布局場景顯示及視角變換、設備布局調整及視場覆蓋效果顯示、觀測目標顯示及位置調整、觀測設備布局效果圖及安裝布局參數保存等功能。
【關鍵詞】可視化仿真 水下觀測 SolidWorks OPenGL
1 引言
水下過程實況觀測與記錄為我們水下作業事后分析提供了第一手直觀的視頻資料,對水下工程作業具有重要意義。水下過程觀測記錄系統攝像機、照明燈的布局直接關系到有限攝像機數量條件下視場覆蓋范圍、成像質量、拍攝的有用信息量等。
軟件仿真是在計算機中生成一種仿真環境,以視景仿真和三維動態仿真來展現實體的行為方式和環境。軟件仿真這個概念從20 世紀80 年代正式提出以來,隨著計算機科學的飛速發展己取得了很大的發展,在工程、軍事、醫學、影視等領域已得到了廣泛的應用。在軍事方面主要應用于水下裝備虛擬設計和虛擬戰場演示等。本論文依托該項技術設計研制一套水下作業觀測設備布局可視化仿真軟件系統,為水下作業觀測記錄設備合理布局提供一個有效便捷的技術方法。論文采用SolidWorks繪圖工具軟件繪制了水下作業平臺、水下作業觀測設備、觀測目標的三維立體模型,并用Deep Exploration三維圖形專業格式轉換軟件轉換模型格式為OpenGL可讀取的數據列表格式,在OpenGL圖形開發環境下實現了水下作業觀測設備布局場景顯示及視角變換、觀測設備布局效果顯示及布局調整、觀測目標顯示及位置調整、透明度設置、布局方案效果圖及參數保存等功能。
2 總體設計思路
軟件仿真實現現實場景計算機虛擬顯示可采用的技術方案多種多樣,編程環境可選擇VC++、VB或者Delphi等,圖形開發庫可選擇OpenGL或者DirectX。單純采用編程語言及自帶的函數庫很難設計出復雜的三維模型,流行的圖形開發包DirectX較適合于游戲開發及加強多媒體性能等方面,OpenGL則可以設計與渲染出復雜、高仿真度的三維模型且其與多種編程語言方便有效互連。SolidWorks繪制的三維模型經格式轉換能方便地導入OpenGL三維場景繪制環境。另外,OpenGL可以與VC++2010建立緊密接口,便于實現有關計算和圖形算法,可保證算法的正確性和可靠性。在VC++2010的MFC框架編程環境下進行可視化仿真軟件程序設計,利用VC++的封裝性可以減少開發自定義窗口的時間和創造出可重用的代碼,可以在必要時更好的控制窗口的活動。綜合各方面因素,本論文采用VC++2010與OpenGL聯合開發設備布局可視化仿真軟件。
在水下作業實況觀測過程中,為獲取水下作業過程更全面的視場視頻圖像信息,必須從三個方面進行分析:首先分析設備安裝平臺尺寸及可安裝位置分布;其次要獲取水下觀測攝像機、照明燈等設備的性能(像機的視場、作用距離、燈光照射范圍等)參數;再次要對拍攝目標的形狀、大小尺寸及位置信息等進行分析。所以本論文可視化仿真軟件中三維模型的建立也主要圍繞此三個方面進行。
SolidWorks作為基于Windows平臺的全參數化特征造型軟件,可以方便地實現機械零件的三維實體造型、裝配和生成工程圖。依據相關資料和實物的準確尺寸可以繪制出各項目的三維模型。采用SolidWorks機械設計工具軟件繪制各攝像機、輔助照明燈、水下作業平臺、觀測目標等三維模型,先建立各項目單個零件圖,然后將相關零件組合成裝配圖。這些零件圖和裝配圖組成設備安裝三維立體圖庫。論文為了將三維模型能夠轉換為能讀入VC++編譯環境的CPP 文件,首先將由SolidWorks 建立的三維模型轉換為STL 文件格式的網格模型。接著通過Deep Exploration 把STL 文件轉換為CPP 格式的文件,再把CPP 格式三維模型添加到MFC 框架的OpenGL繪制環境中,并進行模型的數據列表讀取和顯示,接著利用OpenGL庫函數實現模型繪制、模型觀察、顏色模式的指定、光照應用、圖像效果增強、位圖和圖象處理、紋理映射、實時三維視景仿真等,OpenGL函數實現的這些功能添加到MFC類-對象中組成實現軟件系統的各功能模塊。
論文研究流程如圖1所示。
3 功能模塊實現
為了模擬水下作業實況觀測設備安裝的實際過程與安裝效果,仿真軟件主要設計以下幾個功能模塊實現軟件系統各功能:
(1)場景顯示、漫游模塊:創建安裝效果顯示窗口,實現顯示窗口視角平移、旋轉等視場調整功能;
(2)三維模型導入選擇模塊:建立安裝環境的三維場景,并將各設備三維模型選擇添加導入三維場景中;
(3)攝像機、燈布局調整模塊:實現水下作業實況觀測系統各攝像機和燈的位置、姿態調整與坐標顯示;
(4)拍攝或照射區域設計模塊:實現水下作業實況觀測系統攝像機攝錄視場、燈照明視場顯示與水下透明度調整;
(5)觀測目標位置調整模塊:實現觀測目標位置調整功能;
(6)布局效果圖與布局參數輸出模塊:實現水下作業實況觀測系統安裝布局可視化仿真效果圖及布局參數的輸出。
設備布局可視化仿真軟件系統的功能模塊組成框圖如圖2所示。
下面就可視化仿真軟件幾個主要功能模塊的設計與實現分別進行詳細介紹。
3.1 場景顯示、漫游模塊
軟件主要采用啟動線程的方式進行場景繪制、模型導入和位置調整,線程創建函數為CreateThread(NULL,0,Plot3DTrajectoryShow, NULL,0,NULL);線程響應函數Plot3DTrajectoryShow主要調用CTrajectory3DView的接口函數CreateOpenglWindow()完成三維場景顯示,該接口函數調用類成員函數DrawGLScene()實現水下場景繪制。
運用OpenGL進行三維場景繪制顯示首先需要創建繪制環境渲染描述表(Rendering Context,以下簡稱“RC”)。一旦在一個線程中指定了一個當前渲染描述表,在此線程中其后所有的OpenGL命令都使用相同的當前渲染描述表。軟件將首先產生一個OpenGL渲染描述表并使之成為當前渲染描述表,這將分為三個步驟:設置窗口像素格式;創建渲染描述表;設置為當前渲染描述表。
3.2 三維模型導入選擇模塊
軟件工程采用類——對象的方法,為三維場景中每個三維模型獨立單元建立一個類,定義一個該類對象,每個模型的頂點列表、材質、紋理等數據及生成模型數據列表的函數都封裝在各自的類中。在選擇導入某設備三維模型時,只需要調用 glCallList(GLenum) 函數加載三維模型的數據列表,函數參數 GLenum 為三維模型數據列表的編號。
由于攝像機和照明燈需要俯仰調整,此時支架的位置信息與設備位置信息不一致,因此,水下觀測設備及其安裝支架必須分開成兩個獨立模型進行類創建與對象定義,便于各自調用。
3.3 攝像機、燈布局調整模塊
OpenGL 中使用的坐標系有兩種,分別為世界坐標系和屏幕坐標系。世界坐標系即OpenGL 內部處理時使用的三維坐標系,而屏幕坐標系即為在計算機屏幕上繪圖時使用的坐標系。
OpenGL 所使用的世界坐標系通常為右手型。從計算機屏幕的角度來看,z 軸正方向為屏幕從里向外,y 軸正方向為屏幕從下向上,x 軸正方向為屏幕從左向右。計算機本身只能處理數字,坐標建立了圖形和數字之間的聯系。因此,為了使仿真模型數字化,要在被顯示的物體所在的空間中定義一個坐標系。這個坐標系即為世界坐標系,這個坐標系的長度單位和坐標軸的方向要適合對被顯示物體的描述。此外,在圖形顯示器屏幕上定義一個二維直角坐標系,這個坐標系為屏幕坐標系。計算機對數字化的顯示物體做了加工處理后,要在圖形顯示器上顯示。
OpenGL圖形庫的變換包括模型幾何變換和投影變換。模型幾何變換有平移、旋轉、縮放變換,投影變換有平行投影(又稱正射投影)和透視投影兩種變換。軟件工程在圖形繪制之前首先要設置好投影變換矩陣、視點坐標和視口變換矩陣,這些矩陣的設置保證軟件工程顯示窗口最終能以我們調整的視角顯示我們想要看到的世界坐標系下的三維模型。接著軟件工程利用世界坐標系下三維模型獨立單元局部坐標系的平移、旋轉、縮放變換實現了三維模型位置姿態的調整。
3.4 攝像機、燈視場設計模塊
論文軟件工程采用具有漸變色部分透明效果的錐體來表現水下作業實況觀測設備的視場。采用四棱錐繪制攝像機攝錄視場,四棱錐水平發散角表現攝像機的水平視場角,四棱錐豎直發散角表現攝像機的豎直視場角;采用圓錐體繪制照明燈照射視場,圓錐體發射角的表現燈的照明視場角。各棱錐從頂點到底面以顏色深度逐漸變淺來表現攝錄視場和照明視場光線的強弱,各棱錐的高度表現攝像機成像距離和照明燈有效照射距離,棱錐高度值與海水透明度成線性關系,因此可以通過設置海水透明度值來表達攝像機成像距離和照明燈有效照射距離。各不同類型設備視場用不同顏色區分開來,而且各視場顏色可變更以達到理想分辨效果。
3.5 觀測目標導入與位置調整模塊
觀測目標三維模型使用SolidWorks工具軟件繪制,經格式轉換后進行VC++類封裝,創建觀測目標三維模型的顯示列表,然后運用OpenGL的幾何變換函數對觀測目標的位置進行調整,觀測目標模型的導入與位置調整方法與觀測設備導入與位置調整基本一致。觀測目標位置設置可依據實際情況進行變化,軟件界面上通過輸入位置信息實現觀測目標位置的確定。
3.6 布局效果圖與布局參數輸出模塊
在進行攝像機、照明燈布局設計完成后,該模塊具有以位圖文件形式保存布局效果圖,以文本文件形式保存各攝像機、照明燈布局參數的功能,保存參數包括各觀測設備安裝位置、方位角、俯仰角以及觀測目標位置和海水透明度值。軟件采用 OpenGL庫函數glReadPixels( )從顏色緩沖區讀取場景窗口里所有像素數據,并將此像素數據寫入創建好文件頭數據和信息頭數據的位圖文件,實現位圖保存場景功能。
觀測設備安裝位置坐標是在水下作業平臺平面坐標系下的坐標值,該坐標系原點及X、Y軸方向先預設好。觀測設備方位角、俯仰角也預先作一規定。
在軟件界面的主菜單“文件”子菜單下“保存效果圖”和“保存布局參數”菜單分別實現了以上效果圖及參數保存功能。
4 軟件測試
在軟件工程各項功能設計完成后,要對軟件各項功能進行測試,其中包括場景觀察視角調整功能、觀測設備導入、位置姿態調整功能、視場效果顯示及透明度調整功能、觀測目標導入及位置設置功能、布局效果圖和布局參數輸出功能等。
論文以某一水下轉動作業實況觀測實際需求為例,在海水透明度為5米的條件下對觀測設備進行安裝布局,布局設備包括多臺不同攝像機及照明燈,操作人員可根據觀測目標位置及觀測需求對觀測設備進行調整并從不同視角查看觀測效果。
運行軟件,添加各設備,調整各觀測設備位置姿態,對布局效果進行人機交互顯示,布局總體效果如圖4所示,各不同設備布局效果分別如圖5、圖6所示。
設備布局保存的參數文檔如圖7所示。
5 結論
論文運用OpenGL圖形開發庫聯合SolidWorks繪圖工具軟件,在基于VC++2010的MFC編程環境下設計開發了一套水下作業觀測設備布局可視化仿真軟件。論文采用SolidWorks繪圖工具軟件繪制了作業平臺、觀測設備、觀測目標的三維立體模型,并用Deep Exploration三維圖形專業格式轉換軟件轉換模型格式為OpenGL可讀取的數據列表格式,在OpenGL圖形開發環境下實現了水下作業觀測設備布局場景顯示及視角變換、觀測設備布局效果顯示及布局調整、觀測目標顯示及位置調整、透明度設置、布局方案效果圖及參數保存等功能。經軟件功能測試,可視化仿真軟件系統功能實現良好,對更好地獲取水下作業過程實況觀測信息具有重要意義。
參考文獻
[1]邵宇.基于OpenGL的導彈飛行視景仿真研究[D].哈爾濱:哈爾濱工程大學,2007.
[2]喬生明,劉曉娟.基于OpenGL的城軌ATP系統超速防護功能可視化仿真[J].鐵路計算機應用,2012(03).
[3]馬存寶,朱超.基于OpenGL三維飛行模擬的實現[J].工業儀表與自動化裝置,2014(03).
[4]鬲文娟.電子設備三維仿真平臺開發[D].西安:西安工業大學,2014.
[5]侯俊杰.深入淺出MFC[M].武漢:華中科技大學出版社,2001.
[6]尚游,等.OpenGL高級圖形編程指南[M]. 哈爾濱:哈爾濱工程大學出版社,1999.
[7]喬林,費廣正等編著.OpenGL程序設計[M].北京:清華大學出版社,2000.
作者簡介
呂文磊(1982-),男,安徽省安慶市人。博士學位。現供職于91550部隊93分隊。主要研究方向為光學測量、計算機仿真。
作者單位
91550部隊93分隊 遼寧省大連市 116023