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