劉 琪
(安徽工程大學, 安徽 蕪湖 241000)
三維可視化技術是當今一個十分活躍的研究領域,已廣泛應用于地質、房地產、醫學、娛樂與游戲、氣象數據等多個領域.此技術的核心是在虛擬環境下如何實現三維真實感圖形的模擬仿真[1-2].
目前OpenGL (Open Graphics Library)是三維/二維圖形構建領域中最被廣泛接納的專業圖形接口,它是一個與硬件無關的軟件接口,包含120多個圖形韓式,可大量減少編程工作量,并且可在不同的平臺間支持相互移植,提供了處理光照和物體材質、紋理等眾多通用功能的強大底層圖形庫.結合OpenGL的眾多優點,本研究借助OpenGL軟件包實現了三維自然景觀的可視化控制系統,從而更直觀地表達虛擬環境下的三維景觀真實效果,便于眾多領域的可視化應用借鑒,具有一定的價值.
本研究以Visual C++ 6.0可視化編程工具為平臺,借助OpenGL圖形庫來設置開發環境.具體的開發環境設置步驟如下[3-5]:
a.首先建立工程,并將OpenGL相關頭文件和鏈接庫分別加到Visual C++的Include和Lib的目錄中;
b.在視圖類的PreCreateWindow函數內設置窗口類型;
c.在視圖類的OnCreate函數下面進行OpenGL的初始化工作;
d.在OnSize 函數中定義視口和觀察坐標;
e.在OnDestroy函數中釋放繪制描述表RC和Windows設備描述表DC;
f.在OnDraw 函數中加入繪制場景的代碼.
本研究在地形可視化過程中采用了隨機插值地形模擬的方法,設計思想如圖1所示.

圖1 隨機插值法模擬地形設計思想
2.1.1 隨機地形網格生成算法 地形模擬中涉及到的一個核心值就是高程值.所謂高程值,在測量學中定義是某地表點在地球引力方向上的高度,也就是重心所在地球引力線的高度.通俗的理解,高程也即是地面點到高度起算面的垂直距離,它是確定地面的一個重要因素.根據高程值的大小來模擬地形的高低起伏的效果.本文采用取隨機值的方法獲得某點高程值.核心算法描述如下:
在程序中首先分別定義出隨機地形的最大高程值m_max和最小高程值m_min變量,利用m_min+(m_max-m_min)*(float)(rand( )%10 000/10 000獲取生成地形網格所需某點高程值.
2.1.2 地形繪制——Catmull-Rom多階樣條曲線插值法 Catmull-Rom三次樣條插值算法是一種在已知點進行插值的一種有效算法,具有較強的穩定性和光滑性.結合Catmull-Rom三次樣條插值的特性和優點,本研究采用Catmull-Rom三次樣條曲線插值的方法[6-7]模擬三維地形.Catmull-Rom三次樣條簡單示意圖如圖2所示.

圖2 Catmull-Rom樣條曲線
圖2中P0、P1、P2、P3是控制點,定義一個浮點坐標u,u∈[0.0,1.0],當u=0.0時為P1點,當u=1.0時為P2點,當u在[0.0,1.0]之間變化時,所描繪是3次分段插值Catmull-Rom樣條曲線,該樣條曲線基本方程如下所示(保持C1連續).
p(u)=0.5×[1uu2u3]·
(3-1)
最后,采用三角形近似、紋理貼圖和顯示列表技術,繪制出比較平滑和逼真的三維隨機地形,效果如圖3所示.

圖3 曲線插值法生成的地形和紋理生成后的地形
實現地形的可視化核心步驟為:
a.利用Catmull-Rom樣條公式(3-1)求出三維地形的隨機插值點;
b.設置在控制系統中顯示三維地形的大小;
c.調用網格列表函數實現地形網格的繪制;
d.利用紋理技術對隨機地形進行渲染;
e.通過調用OpenGL中SwapBuffers函數進行相關處理,實現交互系統三維景觀的動畫效果.
本研究采用紋理映射技術模擬天空.首先從OpenGL三維圖形庫中調用gluSphere函數繪制一定大小的球體用球體模型繪制天空,然后采集天空真實數據,經PhotoShop處理后轉換成位圖文件,裝入程序中,將其作為紋理圖通過調用OpenGL 紋理函數進行設置紋理參數、綁定紋理、設置紋理坐標等步驟紋理映射[10-11]到球體模型上,從而使天空模型更加逼真地接近自然景觀,而且還能消除文本鋸齒.同時為增加動態感,實現了紋理按照一定的方向運動的效果.天空生成的流程圖如圖4所示,效果圖如圖5所示.

圖4 天空生成的流程圖

圖5 采集的真實天空圖片和紋理生成后的模擬天空
本研究采用OpenGL軟件包開發工具,在Visual C++ MFC建立的友好界面下,實現了三維自然景觀可視化控制系統的模擬.此控制系統實現的功能有:
a.通過工具欄上的菜單,隨機生成不同的三維地形和天空.
b.鍵盤的上、下、左、右鍵,對整體景觀實時漫游控制,從而更接近真實效果.
效果展示圖如圖6所示.

圖6 整體效果圖
參考文獻:
[1] 劉慎權,李華,唐衛清,等.可視化技術及其發展前景述評[J].CT理論與應用研究,1995,4(1):7-9.
[2] 華慶一,房鼎益.三維可視化對于認知的作用[J].計算機工程與科學,1998, 20(3):38-40.
[3] 汪日偉,韓其睿,吳曉青. 如何在MFC中利用OpenGL實現三維圖形的繪制[J]. 天津工業大學學報,2004(6):65-68.
[4] 胡偉,王弘.如何在VC++中用MFC進行OpenGL編程[J].計算機應用,2001,8:88-89.
[5] 李長春,戴國洪.基于VC++與OpenGL的三維圖形環境的構建[J].電腦開發與應用,2004,17(6):11.
[6] 華才健.非真實感繪制相關技術的研究與實現[D].綿陽:西南科技大學,2005.
[7] 高鷹.基于為Catmull-Rom幾何樣條曲面的過渡曲面構造[J].廣州師院學報:自然科學版,2000(9):64.
[8] 楊健,張敏.基于OpenGL的紋理貼圖技術[J].軟件導刊,2011,10(3):169-171.
[9] 楊剛.基于OpenGL的2D紋理映射技術研究[J].吉林建筑工程學院學報,2011,28(1):85-87.
[10] 孫家廣.計算機圖形學[M].北京:清華大學出版社,1998.
[11] 陳應松,胡漢春,肖世德.基于OpenGL紋理映射技術實現動態圖像的應用[J].計算機仿真,2004,21(5):60-65.