王新波,朱維杰
(1.武警工程學院研究生管理大隊,陜西西安 710086;2.武警工程學院通信工程系,陜西西安 710086)
目前三維應用已涉及建筑、產品設計、醫(yī)學、地球科學、流體力學等各個領域。要模擬這些真實的三維場景,可以先利用專業(yè)建模軟件3DS Max,建立需要的模型,然后結合Visual Studio 2005開發(fā)環(huán)境直接獲取3DS模型數據,在OpenGL中進行繪制交互控制。這種方法一方面可以利用專業(yè)建模軟件3DS Max的優(yōu)點,較快地建立復雜模型,另一方面利用OpenGL的編程接口對建立的模型進行實時繪制和交互控制,降低建模時間,加快系統開發(fā)進程。
OpenGL是一個三維的計算機圖形開發(fā)包,為程序員提供了一個圖形硬件接口。它是一個功能強大、支持底層繪制和造型能力的軟件圖形函數庫,獨立于硬件和窗口系統,適用于所有的主流操作系統平臺,有著廣泛的硬件支持,是為游戲、造型及CAD之類的圖形應用程序而設計。OpenGL能在網絡環(huán)境下以客戶/服務器模式工作,是專業(yè)的圖形處理、科學計算等高端應用領域的標準圖形庫。OpenGL的核心圖形函數功能強大,使用靈活方便,并能夠支持粒子系統,對模擬水、火、雪等自然景物提供了真實有效的方法。3DS MAX是Autodesk公司開發(fā)的基于PC系統的三維動畫渲染和制作軟件。在Windows NT出現以后,3DS Max+Windows NT的組合減低了CG制作的門檻。打破了工業(yè)級CG制作被SGI工作站壟斷的局面。成為三維動畫、圖形及圖像設計首選的優(yōu)秀軟件。廣泛應用在影視廣告、學習娛樂、建筑裝潢、機械制造、抽象藝術等行業(yè)。3DS Max強大的建模能力可以在短時間內迅速建立起復雜的物體模型。但3DS Max中缺乏交互能力,無法實現實時控制,難以直接用于仿真。因此,首先在3DS Max中建造模型,然后在OpenGL繪圖環(huán)境中讀入構造出的模型,再利用OpenGL的交互控制優(yōu)勢以達到理想的三維效果。
3DS Max提供了高級的三維建模指令,它豐富的建模技術能夠較為方便和真實地表現復雜、精細的模型。它在業(yè)產品設計、數字化技術、仿真系統等諸領域中得到廣泛應用。在3DS Max中有著多種建模方法,但其核心共3種:多邊形建模、面片建模、Nurbs建模。由于每種建模方法都有自己的優(yōu)勢和不足,因此,必須在充分了解這些優(yōu)勢和不足之后,才能在實際工作中揚長避短。如由較大的直邊和平面構成的對象,還有建筑模型,如墻、床、門、甚至是家具等用多邊形建模最有效。面片建模多用于光滑表面建模。NURBS建模方法的主要優(yōu)點是具有多邊形建模方法及編輯的靈活性,但不依賴于復雜網絡細化表面。在這方面,他更像使用面片表面。建模時可以只使用曲線定義表面。這些表面在窗口中看起來細節(jié)較少,但在渲染時卻有更高層次的復雜度。如果能力具備,應該盡可能全面的掌握3DS Max的不同建模方法,因為在同一場景或對象組中,不同的建模方法是互補的。
3DS模型建立完成后,可以用 3D Exploration,Wcvt2pov等軟件把3DS模型轉換為相應的OpenGL的CC++格式文件,也可以由程序直接載入3DS模型。用軟件轉換格式的方法能夠保留模型的顏色、紋理等信息。但也有局限性,即在轉換模型時需要軟件的支持和人工交互轉換,且每次也只能轉換一個模型。因此,效率并不高。而由程序直接的方法可以自由控制所需載入的模型,提高程序運行的效率。3DS模型載入OpenGL程序后,還需進行相應的比例放縮、旋轉、移動等控制。
(1)讀取3DS模型。
3DS文件采用塊結構的組織方式,并且塊與塊之間存在嵌套關系,所以對3DS文件中的三維模型數據的讀取方式是從模型文件中讀取一個塊,根據塊ID來判斷塊的功能信息,然后根據塊ID進行相應處理。在塊處理過程中,比如主編輯塊,也是通過相同的方式,讀取一個子塊,判斷塊信息,再進行相應的數據提取和存放處理。
(2)構建模型顯示列表。
在編寫OpenGL程序時,遇到重復的工作,可以創(chuàng)建一個顯示列表,把重復的工作裝入,并在需要的地方調用這個顯示列表。使用顯示列表一般有4個步驟:分配顯示列表編號、創(chuàng)建顯示列表、調用顯示列表、銷毀顯示列表。
(3)根據3DS模型的最小和最大x,y坐標和三維場景實際需要的寬度和高度計算其縮放比例,對模型進行縮放。使用函數為:glScalef(GLfloat x,GLfloat y,GLfloat z)。把當前矩陣和一個表示縮放物體的矩陣相乘。x,y,z分別表示在該方向上的縮放比例。
(4)根據模型在三維場景中的方向角度,對模型進行旋轉。使用函數為:glRotatef(GLfloat angle,GLfloat x,GLfloat y,GLfloat z)。把當前矩陣和一個表示旋轉物體的矩陣相乘。物體將繞著(0,0,0)到(x,y,z)的直線以逆時針旋轉,參數 angle表示旋轉的角度。
(5)根據模型在三維場景中的位置,計算模型x,y,z方向的平移量,將模型平移。使用函數為:glTranslatef(GLfloat x,GLfloat y,GLfloat z)。把當前矩陣和一個表示移動物體的矩陣相乘。3個參數分別表示在3個坐標上的位移值。
(6)實現3DS模型在三維場景中按對應大小、方向、位置的放置,調用顯示列表,完成模型的繪制。
3DS Max建模軟件直觀、方便易學,可操作性強,能夠制作出高質量模型,并提高建模效率。采用OpenGL技術與3DS Max軟件的方式來構建虛擬三維空間的方法,克服了OpenGL缺乏復雜三維模型的創(chuàng)建能力,使得使用OpenGL的簡單函數也可以輕松地創(chuàng)建出復雜精美的三維模型。同時OpenGL的實時性的交互能力,彌補了3DS Max缺乏交互性的缺點。而且,OpenGL還提供了模型變換、紋理貼圖、顯示列表等技術,提高了Opengl對三維圖形的控制能力,優(yōu)化了三維場景的處理速度。OpenGL的靈活性、實時交互性結合3DS MAX強大的創(chuàng)建模型的能力,這種便利高效的組合,使其在虛擬現實和計算機仿真中得到了廣泛應用。
[1]呂希奎,周小平.實戰(zhàn)OpenGL三維可視化系統開發(fā)與源碼精解[M].北京:電子工業(yè)出版社,2009.
[2]王瑤.3ds Max 2008完全手冊[M].北京:科學出版社,2007.
[3]RIEHARD S W,BENJAMIN J.Lipchak nicholas haemel Open-GL超級寶典[M].4版.北京:人民郵電出版社,2010.
[4]伏玉琛,周洞女.計算機圖形學[M].武漢:華中科技大學出版社,2006.
[5]郭兆榮,李菁,王彥.Visual C++OpenGL應用程序開發(fā)[M].北京:人民郵電出版社,2006.
[6]陳東亮,陸達.關于在OpenGL中裝載3DS模型文件的分析[J].福建電腦,2007(5):59-60.