聶 巖 云美厚
河南理工大學資源環境學院,河南 焦作 454000
基于OpenGL的野外地震勘探區場區建模及漫游實現
聶 巖 云美厚
河南理工大學資源環境學院,河南 焦作 454000
結合野外地震勘探虛擬仿真系統開發實例,分析了利用碎片整合思想實現地震勘探區三維場景的建模問題,并深入討論了模擬行走和仿真飛行兩種不同漫游模式下的算法思想及功能實現。經測試,系統仿真效果好,交互性能高,為后期地震勘探作業流程的仿真開發工作起到了很好的鋪墊。
地震勘探;OpenGL;天氣仿真;虛擬漫游
地震勘探技術由于高分辨率、高精度和高控制性[1]的優點而被廣泛地應用于地下礦藏構造形態及儲量特征的勘察工作中,全社會對地震勘探的投入及人才方面的培養也日益加大,然而,地震勘探設備由于價格昂貴、體積龐大,加之實驗場地位于野外,為此,在專業人才培養方面,國內很多企業和高校都遇到了經費不足、場地難找、安全風險高等一系列問題。因此,開發一個能夠模擬野外地震勘探的專業培訓系統是一個亟待解決的任務。OpenGL是美國SGI公司開發的一款三維圖形編程接口,目前已經成為國際上通用的開源式三維圖形標準[2],它可以在多種操作系統平臺中運行,用戶可通過OpenGL封裝的各種接口函數實現三維圖形的創建、光照、紋理貼圖、剛體運動模擬等功能,從而開發出順應用戶不同需求的交互式仿真程序。本文即結合系統開發實例,探討在VC++6.0的MFC編程環境下利用OpenGL實現野外地震勘探區場區的構建及場區漫游功能的仿真技術。
開發野外地震勘探仿真系統的一個首要工作就是勘探區場地模型的構建,在勘探區場地的構建環節,為了實現不同勘探地形環境下的地震勘探工作的仿真,本系統采用了平原和起伏丘陵兩種不同的地形模式供用戶選擇。在地形算法的實現方面,本著系統代碼低冗余度和高使用率的原則,系采用碎片整合算法[3]思想來同時實現兩種不同的地形模式,即采用以50*50為一個地形單位的地形集合算法,首先建立存儲頂點坐標的結構體函數TP,分別創建用來表示結構體函數的二維數組L_view[N][M](N=M=(LAND/50)+1)和指向二維數組的結構體類型指針*tp,然后采用遍歷算法記錄每一次遍歷到的三個點(L_view[N][M]、L_view[N][M+1]、L_view[N+1][M+1]),再利用glbegin(GL_TRIANGLE_STRIP)命令將這三個點連成一個三角形,并依照此算法以此遍歷完所有的點(供N*N個點)為止,這時,整個勘探區就形成了由(N-1)*(M-1)*2個三角形碎片組成的地形模型。最后采用循環分割算法,依次將地形平均分割成四份,得到并存儲連接四份均等子地形的結點,依照此方法繼續分割前一次分割后得到的子地形,得到并存儲這次分割后連接各個更小的四份均等子地形的結點,依次循環,直到不能再分割為止,這樣,通過調整存儲的結點y軸坐標,來實現平原和起伏丘陵的地形地貌特征。如圖1:

圖1 碎片分割算法
關鍵代碼如下:




圖2 分割算法結果(平面)

圖3 丘陵地形
漫游技術是虛擬仿真技術領域的一個重要組成部分,也是仿真技術中交互性和浸沒性特征的重要體現[4],它實現了對三維場景的數字化和虛擬化效果,通過與人機交互技術相結合,用戶能夠自由的觀察和體驗虛擬環境[5],產生浸沒感,從而達到用戶與系統的完美統一。考慮到客戶的不同需求和虛擬仿真系統的交互性特征,系統開發出了行走模式和飛行器模式兩種漫游功能供用戶體驗。
2.1 行走模式

圖4 函數translatef(0.0f,6.0f,0.0f)的理論解析
OpenGL的漫游功能離不開CPU和顯卡的實時計算與渲染,當用戶按下鼠標或者某個鍵時,會向系統發送一消息,系統接收到消息后,會執行相應的事件響應,為了實現漫游功能,系統需要在用戶發送消息后一直執行某個操作(比如向前行走),并等待用戶發送停止前進或者其他動作的消息,而在這個過程中,系統需要將處理這一事件的程序段放入后臺運行,一直到接受到下一消息時停止這個后臺循環。基于這一點,VC++平臺提供了一個Onidle()函數執行后臺空閑消息循環的命令,用于處理缺省時的空閑消息循環,即用戶的后臺空閑處理命令。同時,在系統實時漫游的過程中,為了實現“行走”的效果,采用了OpenGL提供的translatef(x,y,z)接口函數,此函數相當于將當前的模型視圖矩陣乘以位移矩陣后得到的新的矩陣,如圖4所示。
綜合以上的理論分析,只需令系統在空閑消息循環中執行矩陣位移函數translatef()即可實現行走的漫游功能。關鍵代碼如下所示:

2.2 飛行器模式
此模式是綜合分析了飛機駕駛員在地平線上飛行的仿真原理基礎上開發的,飛行員在操作飛機操縱桿時,飛機會出現航道左右偏移的情況,而在飛行員開來,地平線會隨著飛機航道的偏移而出現“傾斜”的情況,在仿真系統中,當操作員偏移手柄或者鼠標時,系統可根據手柄或鼠標的偏移距離按照比例計算出OpenGL模型視圖矩陣的偏移角,并結合2.1所述的空閑消息循環原理,對當前偏移矩陣進行實時計算和渲染。與位移矩陣函數一樣,OpenGL也提供了rotatef()接口函數對當前矩陣進行偏移處理。其原理如圖5所示:

圖5 函數rotatef(θ,0.0f,0.0f,1.0f)的理論解析
飛行器模式關鍵代碼如下:

仿真效果如圖6所示:

圖6 飛行器仿真漫游效果圖
本文結合地震勘探仿真系統開發實例,在分析了探區地形建模算法的基礎上,深入討論了勘探區不同漫游模式下的仿真算法理論,并結合實際編程實現了各種模式下的功能。經測試,系統真實感強、交互性能好,達到了預期的效果。在接下來的仿真開發工作中,計劃采用OpenGL建模和讀取3Dsmax模型文件兩種方法加載地震勘探設備三維模型,并結合已實現的開發模式,完成后期針對三維模型的仿真渲染和實時交互控制兩大功能,從而實現對勘探區域整個地震作業流程的開發。
[1]曹思華.三維地震勘探技術在礦井地質中的應用[J].煤炭工程,2005,10.41-43
[2]陳素麗,任福深.基于OpenGL的弧焊機器人仿真設計[J].科學技術與工程,2011,3(12).543-550
[3]簡斌,田竹友.基于MFC編寫的OpenGL程序實現公式曲線預顯[J].北京機械工業學院學報,2001,3(16).41-47
[4]Richard S.Wright,Michael Sweet,OpenGL 超級寶典[M].人民郵電出版社.2006:337-341
[5]徐敬.虛擬漫游開發技術[J].軟件導刊,2007,9:106~108
TP391.9
A
10.3969/j.issn.1001-8972.2012.21.035