王靜 席澤敏 周超
(海軍工程大學電子工程學院,武漢 430033)
OpenGL即開放型圖形庫(open graphic library),是一個優秀的三維圖形硬件的軟件接口,同時也是一個跨平臺、開放性的三維圖形和模型庫。在分析復雜目標的電磁散射特性時,首先建立目標的幾何模型。如果利用OpenGL會比較復雜,因為它沒有建立三維幾何模型的高級命令,要通過建立基本的幾何圖元(如點、線、面等)來實現。相對而言運用3DS MAX軟件建模要節約不少時間。
在電磁環境中,入射角相對于目標體的入射角度不同會引起目標不同的散射特性,因此準確判斷入射方向上目標的可見部分是散射計算的前提,即目標的遮擋面判別。OpenGL作為一種用于實時3D圖形的應用程序編程接口(Application Programming Interface,API),提供了 155 個圖形函數,可以利用這些函數來實時構造目標模型。
計算機圖形學中介紹了復雜物體的面消隱方法主要有區域排序法、深度緩存法、掃描線算法[1]。本文利用 OpenGL的圖形功能和 VC++的編程功能,實現讀取3DS模型文件并設置光照入射點,利用深度緩存法(z-buffer algorithm)繪制不同入射角度時的目標模型可見部分。該算法通過借助額外的存儲空間來保存繪制過程中繪制器已經繪制的多邊形的深度信息。所以在使用時啟用深度緩存以后還必須清空深度緩存。

表1 幾個主要塊的ID與包含信息
3DS模型文件的基本構成單位是塊,塊包括塊頭和主體內容,塊頭又包括塊的 ID和塊的長度,主體內容是塊的數據信息。每一個3DS文件的開頭都是由一個ID為0x4D4D的基本塊構成,此外還有兩種主塊:ID為3D3D的3D編輯程序塊和ID為B000的關鍵幀塊。表1所示為幾個主要塊的 ID與包含信息。下面列出幾個主要塊的ID與包含信息。
下面進行文件內容的讀入[3]:
①首先定義讀取模型中需要設置的一系列數據結構。

④場景初始化:創建窗體,初始化 OpenGL環境,設置OpenGL繪圖窗口大小,投影模式,定義視圖體,設置光源,定義視點位置、視角和視線方向。
在OpenGL中設置光源函數為glLight*()[1,2],用時需啟用光照計算,例如對于單個光源可以輸入代碼:
glEnable(GL_LIGHTING);

該函數涉及的參數包括視口位置(eye)、被視察點(at)、所期望的up方向。
⑤繪制場景:調用類CTriList中的drawGL()繪制函數,通過函數 glTranslatef 、glRotatef實現物體在坐標系中的移動和旋轉得到期望的場景顯示。
啟動深度檢測,打開深度檢測開關,并設置檢測方式:

并且在完成繪圖以后,實現禁止深度檢測:

以艦船模型為例,使用 3DS MAX軟件建其模型如圖1所示。

圖1 3DS MAX模型
將其3DS文件讀入OpenGL,設置視口位置,開啟深度緩存,繪制場景圖。以四個入射角度為例,λ代表入射角,θ代表俯仰角,船頭方向為正方向。圖2顯示了不同入射角度船模可見部分顯示。
可以通過對圖像的移動進行放大和縮小,可以清晰的顯示在固定入射角時物體的可見部分,并且可以快速的進行判別。

在進行目標電磁計算時對目標的可見部分進行判別是必不可少的一部,對于簡單的物體可以使用面自身的遮擋以及面與面的遮擋來判別,但是對于復雜的物體來說,判別的過程比較麻煩。因此,本文選用在 VC++6.0的基礎上使用OpenGL實現對3DS格式的導入,即可以簡化建模的過程,也可以通過OpenGL實現入射方向上目標可見部分的實時判別。不僅縮短了判別的工作量和時間,也適用于電磁散射計算中。
[1]李春雨等. 計算機圖形學及實用編程技術[M]. 北京航空航天大學出版社, 2009: 157-158, 271-274.
[2]Edward Angel.OpenGL編程基礎[M]. 北京: 清華大學出版社(2008): 75-96, 120-128.
[3]和平鴿工作室. OpenGL高級編程與可視化系統開發高級編程篇[M]. 中國水利水電出版社(2005):68-77.
[4]湯彬. 基于 OpenGL圖形消隱的研究[J]. 上海工程技術大學學報, 2005(3).
[5]高美真, 黃嬌青. OpenGL中的圖形變換[J]. 焦作師范高等專科學校學報, 2006(6).
[6]潘修強. 利用OpenGL和3DS MAX構建復雜模型[J]. 浙江工貿職業技術學院學報, 2006(12).
[7]趙衛東, 衛剛, 李啟炎. 在OpenGL下面消隱和線消隱的實現[J]. 計算機工程, 2002(6).
[8]楊東梅, 朱勝緣, 路偉成. OpenGL與 3D Studio MAX結合實現三維仿真[J]. 應用科技, 2004(2).