用面向?qū)ο蟮姆椒▽崿F(xiàn)3DS文件的讀取與操縱_第1頁
用面向?qū)ο蟮姆椒▽崿F(xiàn)3DS文件的讀取與操縱_第2頁
用面向?qū)ο蟮姆椒▽崿F(xiàn)3DS文件的讀取與操縱_第3頁
用面向?qū)ο蟮姆椒▽崿F(xiàn)3DS文件的讀取與操縱_第4頁
用面向?qū)ο蟮姆椒▽崿F(xiàn)3DS文件的讀取與操縱_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、用面向?qū)ο蟮姆椒▽崿F(xiàn)3D S 文件的讀取與操縱*王益群1,2,黃 誠31南京工業(yè)大學(xué)信息科學(xué)與工程學(xué)院,江蘇南京 210009;2鹽城工學(xué)院計算機(jī)科學(xué)技術(shù)系,江蘇鹽城 224003;3上海盛大網(wǎng)絡(luò)發(fā)展有限公司,上海 =%&201203摘 要:介紹了利用面向?qū)ο蟮某绦蛟O(shè)計方法實現(xiàn)了3D S 文件的讀取。與面向過程的方法比較,面向?qū)ο蠓椒▽τ诶斫?D S 文件的讀取、重繪及控制顯得條理清晰,易于掌握,同時又方便移植到其它應(yīng)用程序中?;谶@一點,提出了將3D S 文件的讀取工作封裝在一個類中,從而提高了程序的可讀性。關(guān)鍵詞:面向?qū)ο?O pe n G L ;3D MA X ;法向量中圖分類號

2、: 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-5322(200503-0041-04 隨著計算機(jī)技術(shù)的飛速發(fā)展,計算機(jī)動畫、科學(xué)計算可視化和虛擬現(xiàn)實逐漸成為計算機(jī)圖形學(xué)領(lǐng)域中三大重要技術(shù),而三維圖形又是這三大技術(shù)的核心內(nèi)容1。三維圖形現(xiàn)在已廣泛應(yīng)用于建筑學(xué)、醫(yī)學(xué)、C A D /C AM /C A E 、分子結(jié)構(gòu)研究、模擬仿真、虛擬現(xiàn)實、廣告業(yè)和娛樂業(yè)等諸多領(lǐng)域2,編程實現(xiàn)3D S 文件的讀取、重繪及控制具有重要意義。傳統(tǒng)的基于過程的設(shè)計方法,由于相關(guān)函數(shù)多而且散雜同時數(shù)據(jù)又與函數(shù)分離,導(dǎo)致不便于程序的移植。為了克服這些缺點,本文采用了面向?qū)ο蟮某绦蛟O(shè)計方法,將3D S 文件的形體數(shù)據(jù)讀入到類中,然后

3、由其成員函數(shù)利用O pe n G L 實現(xiàn)對3D S 文件的讀取、重繪及操縱。1 3D S 文件結(jié)構(gòu)及O pe n G L 簡介目前三維圖形制作軟件很多,如A u t o C A D 、U G 、3D MA X 、W a v e f r o n t 等,因而其文件格式非常豐富。3D S t u d i o 是A u t o d e s k 公司開發(fā)的一套在微機(jī)上制作三維動畫的應(yīng)用程序。本文利用由該軟件產(chǎn)生的三維圖形文件為例來實現(xiàn)三維圖形的讀取、操縱與控制。3D S 文件由許多塊組成,每個塊首先描述其信息類別,即該塊是如何組成的。塊的信息類別用I D 來標(biāo)識,塊還包含了下一個塊的相對位置信息。因

4、此,即使不理解一個塊的含義,也可以很容易地跳過它。要想對3D S 文件的讀寫有一個明確的認(rèn)識,必須準(zhǔn)確知道它的含義。O pe n G L 全稱為“開放式圖形庫”,是由S G I 公司開發(fā)的三維圖形A P I ,目前在圖形開發(fā)領(lǐng)域已經(jīng)成為工業(yè)標(biāo)準(zhǔn);是國際上通用的圖形硬件的軟件接口,獨立于操作系統(tǒng)和硬件環(huán)境,是一個完全可移植并且速度很快的3D 圖形建模庫3。但O pe n G L 沒有提供三維模型的高級命令,它是與通過基本的幾何圖元即點、線及多邊形來建立三維模型的。目前有許多的三維圖形軟件如3D S MA X ,A U T O C A D ,可以方便地建立物體模型,但又難以對其進(jìn)行控制,比如3D

5、S MA X 的動畫是基于關(guān)鍵幀而不是人機(jī)交互的。把這些模型轉(zhuǎn)換成O p e n G L 程序,再對其進(jìn)行控制則是一種比較理想的方法。在建模階段可以利用三維軟件建立模型,避免在O pe n G L 中用點、線和多邊形來建立三維立體模型的繁重的勞動;在控制階段,則可以通過O pe n G L 程序?qū)崿F(xiàn)對模型的人機(jī)交互調(diào)整,從而可以隨心所欲地利用現(xiàn)成的模型實現(xiàn)第18卷第3期2005年9月鹽城工學(xué)院學(xué)報(自然科學(xué)版J o u r n a l o fY a n c h e n g I n s t i t u t e o fT e c h n o l o g y(N a t u r a l S c i

6、e n c e V o l .18N o .3J u n .2005*收稿日期:2005- -作者簡介:王益群(1978-,男,江蘇建湖人,南京工業(yè)大學(xué)碩士研究生,高級程序員,研究方向:計算機(jī)應(yīng)用技術(shù)。虛擬現(xiàn)實。2實現(xiàn)方法462.1文件內(nèi)容的讀取2.1.1數(shù)據(jù)說明在文件讀取前,首先需要定義一系列的結(jié)構(gòu)用來存放3D數(shù)據(jù),如對象的材質(zhì)、位置矢量、對象類(C T r i O b j e c t和對象列表類(C T r i L i s t等,下面對兩個重要的類作簡單說明:(1C T r i O b j e c t類:主要用于處理3D S文件中的各種對象。c l a s sC T r i O b j e

7、 c tp u b l i c:v o i dd r a w G L(:/利用O p e n G L繪畫三角形v o i d c a l N o r m a l s(;/計算法向量.P r i v a t e:/對象基本的成員變量f l o a t*x;f l o a t*y;f l o a t*z;/三角形的頂點f l o a t*n x;f l o a t*n y;f l o a t*n z;/面的法向量i n t*f a c e s;/面信息t M a t e r i a l*m a t e r i a l s;/材質(zhì)信息.;(2C t r i L i s t類:用于處理對象序列,它是C

8、 T r i-O b j e c t的集合,保存了三維模型的形體數(shù)據(jù)。c l a s sC T r i L i s tp u b l i c:v o i dd r a w G L(;/繪制3D模型B O O La d d(C T r i O b j e c t*_o b j e c t;/增加對象.p r i v a t e:i n tn u m o b j e c t s;/C T r i O b j e c t對象的數(shù)目C T r i O b j e c t*o b j e c t s100;2.1.2對象的讀取文件的讀取工作實質(zhì)上是如何構(gòu)造C T r i L i s t 列表,也就是如何

9、從3D S文件中讀取數(shù)據(jù)來構(gòu)造C T r i O b j e c t對象,然后再組織到C t r i L i s t列表中。文件的讀取主要包括循環(huán)讀取3D對象所使用的材質(zhì),形體數(shù)據(jù)以及關(guān)鍵幀數(shù)據(jù)等,同時忽略其它一些不需要的數(shù)據(jù),這一切都是通過C3D S R e a d e r類來實現(xiàn)的。(1C3D S R e a d e r類的簡單說明c l a s sC3d s Re a d e rp u b l i c:i n tR e a d K F D A T A(.;/讀取關(guān)鍵幀數(shù)據(jù)i n t R e a d3D S C h u n k(.;/讀取3D S塊結(jié)構(gòu)i n tR e a d P o i

10、n t A r r a y(.;/讀取頂點數(shù)據(jù)i n tR e a d F a c e A r r a y(.;/讀取面數(shù)據(jù)i n tR e a d M e s h M a t G r o u p(.;/讀取對象所用的材質(zhì)i n tR e a d T r i O b j e c t(.;/讀入對象數(shù)據(jù)i n tR e a d M a t E n t r y(.;/讀入材質(zhì)定義,并將其添加到材質(zhì)庫中i n tR e a d M D A T A(.;/讀取3D 對象模型數(shù)據(jù)i n tR e a d3D S F i l e(.;/讀取3D S 文件.p r i v a t e:C T r i L i

11、 s t*D a L i s t;/此鏈表用于存放形體對象數(shù)據(jù);(2讀取的過程i n t C3d s R e a d e r:R e a d3D S F i l e(l o n g f i l e S i z e, l o n g f i l e S t a r t,l o n g f i l e L e n,F I L E*f pl o n g c h u n k S t a r t=f t e l l(f p;C h u n k3D S c h u n k;M a t e r i a l D i c t*m a t d i c t=n e w M a t e r i a l-D i c t

12、(;u n s i g n e d l o n g v e r s i o n;w h i l e(c h u n k S t a r t(f i l e S t a r t+f i l e L e n &&R e a d3D S C h u n k(f p,c h u n k·24·鹽城工學(xué)院學(xué)報(自然科學(xué)版第18卷s w i t c h(c h u n k.i dc a s eM3D_V E R S I O N:i f(!R e a d U L o n g(f p,v e r s i o ng o t o e r r o r;b r e a k;c a

13、s eM D A T A:i f(!R e a d M D A T A(m a t d i c t,f i l e S i z e, c h u n k S t a r t,c h u n k.l e n,f pg o t o e r r o r;b r e a k;c a s eK F D A T A:i f(!R e a d K F D A T A(f i l e S i z e,c h u n k-S t a r t,c h u n k.l e n,f pg o t o e r r o r;b r e a k;d e f a u l t:/忽略一些不需要的塊f s e e k(f p,c

14、 h u n k S t a r t+c h u n k.l e n, S E E K_S E T;c h u n k S t a r t=f t e l l(f p;i f(m a t d i c t!=N U L Ld e l e t em a t d i c t;r e t u r nT R U E;e r r o r:i f(m a t d i c t!=N U L Ld e l e t e m a t-d i c t;r e t u r nF A L S E;2.2計算法向量在將3D S文件讀取后,就可以計算各個面的方向矢量。法線矢量指定哪個方向垂直于多邊形表面,用于光線和陰影計算。

15、它與實體的光照模型密切相關(guān),光線從不同入射角度到模型表面時,顯示結(jié)果會有差別。如果忽略了法向量的計算,將不能重現(xiàn)模型的三維效果。v o i d C T r i O b j e c t:C a l c N o r m a l(i n te n t r y,f l o a t o u t3f l o a t v13,v23;/根據(jù)空間三個點計算兩個矢量值v10=xf a c e se n t r y-xf a c e se n t r y +1;v11=yf a c e se n t r y-yf a c e se n t r y +1;v12=zf a c e se n t r y-zf a c

16、 e se n t r y +1;v20=xf a c e se n t r y+1-xf a c e s e n t r y+2;v21=yf a c e se n t r y+1-yf a c e s e n t r y+2;v22=zf a c e se n t r y+1-zf a c e s e n t r y+2;/計算法向矢量o u t0=v11*v22-v12*v21;o u t1=v12*v20-v10*v22;o u t2=v10*v21-v11*v20; 2.33D對象的繪制讀取了模型數(shù)據(jù),計算了法向量后,就可以在V C+6.0中重繪模型,下面分三步進(jìn)行:(1處理O n

17、C r e a t e事件,在視圖文件中初始化O p e n G L繪圖環(huán)境。該程序中將設(shè)置像素格式并創(chuàng)建O p e n G L繪制描述表等,而只有創(chuàng)建了O p e n G L繪制描述表和設(shè)置了像素格式后, O p e n G L的繪制命令才有效。同時還對O p e n G L 的一些默認(rèn)屬性進(jìn)行了一些設(shè)置,如繪圖模式、光照及材質(zhì)屬性等。(2處理O n S i z e事件,當(dāng)窗口大小發(fā)生改變時,為了避免比例失調(diào),需要對視口和顯示比例進(jìn)行一些調(diào)整,用g l V i e w p o r t函數(shù)指定視口矩形,用g l u P e r s p e c t i v e函指定仰角、寬高比和深度裁剪值。(3

18、處理O n P a n i t事件,這是重繪工作的最后一步了。當(dāng)讀入3D S文件后,由O n P a i n t函數(shù)來重畫。該事件處理程序是所有O p e n G L繪制程序的真正源頭,所有繪制命令都直接或間接地由該函數(shù)調(diào)用。繪制時是通過每一個C T r i O b j e c t 對象調(diào)用成員函數(shù)C T r i O b j e c t:d r a w G L(繪制每一個對象,從而在窗口中繪制出3D圖形。其中繪制函數(shù)如下:v o i dC T r i O b j e c t:d r a w G L(i n t j;g l B e g i n(G L_T R I A N G L E S;f o

19、r(i=0;i(n u m f a c e s/3;i+j=3*i;i f(m a t e r i a l s a p p l i e dg l C o l o r4f(m a t e r i a l s m a t f a c e si.d i f f u s e C o l o r0,m a t e r i a l sm a t-·34·第3期王益群等:用面向?qū)ο蟮姆椒▽崿F(xiàn)3D S文件的讀取與操縱f a c e s i .d i f f u s e C o l o r 1,m a t e r i a l s m a t f a c e s i .d i f f u s

20、e C o l o r 2,1/m a t e r i a l s m a t f a c e s i .t r a n s p a r e n c y ;e l s e g l C o l o r 3f (0.0f ,0.0f ,1.0f ;:gl N o r m a l 3f (n x i ,n y i ,n z i ;:g l V e r t e x 3f (x f a c e s j ,y f a c e s j ,z f a c e s j ;:g l V e r t e x 3f (x f a c e s j +1,y f a c e s j +1,z f a c e s j +1

21、;:g l V e r t e x 3f (x f a c e s j +2,y f a c e s j +2,z f a c e s j +2;gl E n d (;g l P o p M a t r i x (;3 結(jié)束語本文主要講述了結(jié)合面向?qū)ο蠛蚈 p e n G L 在V C +6.0環(huán)境下實現(xiàn)三維圖像的讀取,并在窗口中重繪。通過對本方法的了解,可以使用O pe n G L 的基本操作,來實現(xiàn)對3D S 文件隨心所欲的控制。把3D MA X 模型應(yīng)用于O p e n G L 中,降低了O p e n G L 復(fù)雜建模的難度,可以得到較真實的復(fù)雜物體模型。在飛行運動模擬的具體應(yīng)用中,利

22、用在O p e n G L 程序中引入3D MA X 各種模型,得到了滿意的三維動畫效果。同樣,我們還可以編寫A u t o C A D 、U G 等多種圖形接口程序,把在A u t o C A D 、U G 等C A D 軟件中建立的物體模型引入O p e n G L 的應(yīng)用程序中,將可應(yīng)用于飛行模擬、運動虛擬仿真、商業(yè)廣告、游戲制作、影視采集、內(nèi)裝飾系統(tǒng)設(shè)計、服裝設(shè)計等多個領(lǐng)域。使用現(xiàn)成的3D S 文件,可以節(jié)省大量的重復(fù)且繁重的勞動,極大地提高了工作效率。參考文獻(xiàn):1孫波.O pe n G L 編程實例學(xué)習(xí)教程M .北京:北京大學(xué)出版社,2000.2王瑩瑩.在V C 中利用O p e n

23、 G L 實現(xiàn)動態(tài)效果圖像的技巧J .微型電腦應(yīng)用,2002,18(6:50-52.3王雪莉,李宗民.V i s u a l C +下O p e n G L 開發(fā)框架與應(yīng)用J .電腦學(xué)習(xí),2004,(5:34-36.4郭景,雷鳴.3D S MA X 模型在O P E N G L 中的讀取與重現(xiàn)J .自動化與儀表,2002,17(5:46-49.5R i c h a r dS .W r i g h t ,J r .M i c h a e l S w e e t .O p e n G L 超級寶典M .北京:人民郵電出版社,2003.6和平鴿工作室.O pe n G L 高級編程與可視化系統(tǒng)開發(fā)M

24、 .北京:中國水利水電出版社,2001.T h eA c c e s s t o 3D SF i l e s b yt h eM e t h o d o f O b j e c tO r i e n t e dP r o g r a m m i n g a n d i t sO pe r a t i o n WA N G Y i -q u n 1,2,HU A N GC h e n g31.C o l l e g e o f I n f o r m a t i o nS c i e n c e a n dE n g i n e e r i n g ,N a n j i n g U n i v

25、e r s i t y o fT e c h n o l o g y ,J i a n g s uN a n j i n g 210009,C h i n a ;2.D e p a r t m e n t o f C o m p u t e r S c i e n c e a n dT e c h n o l o g y ,Y a n c h e n g I n s t i t u t e o fT e c h n o l o g y ,J i a n g s uY a n c h e n g 224003,C h i n a ;3.S h a n g h a i S h a n D aN e t w o r k i n g D e v e l o p m e n t L i m i t e dC o m p a n y ,S h a n g h a i 201203,=%&C h i n a A b s t r a c t :I n t h i s p a p e r ,t h e r e i sam e t h o do f o b

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論