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

下載本文檔

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

文檔簡(jiǎn)介

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

2、: 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1671-5322(200503-0041-04 隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,計(jì)算機(jī)動(dòng)畫(huà)、科學(xué)計(jì)算可視化和虛擬現(xiàn)實(shí)逐漸成為計(jì)算機(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)實(shí)、廣告業(yè)和娛樂(lè)業(yè)等諸多領(lǐng)域2,編程實(shí)現(xiàn)3D S 文件的讀取、重繪及控制具有重要意義。傳統(tǒng)的基于過(guò)程的設(shè)計(jì)方法,由于相關(guān)函數(shù)多而且散雜同時(shí)數(shù)據(jù)又與函數(shù)分離,導(dǎo)致不便于程序的移植。為了克服這些缺點(diǎn),本文采用了面向?qū)ο蟮某绦蛟O(shè)計(jì)方法,將3D S 文件的形體數(shù)據(jù)讀入到類(lèi)中,然后

3、由其成員函數(shù)利用O pe n G L 實(shí)現(xiàn)對(duì)3D S 文件的讀取、重繪及操縱。1 3D S 文件結(jié)構(gòu)及O pe n G L 簡(jiǎn)介目前三維圖形制作軟件很多,如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 公司開(kāi)發(fā)的一套在微機(jī)上制作三維動(dòng)畫(huà)的應(yīng)用程序。本文利用由該軟件產(chǎn)生的三維圖形文件為例來(lái)實(shí)現(xiàn)三維圖形的讀取、操縱與控制。3D S 文件由許多塊組成,每個(gè)塊首先描述其信息類(lèi)別,即該塊是如何組成的。塊的信息類(lèi)別用I D 來(lái)標(biāo)識(shí),塊還包含了下一個(gè)塊的相對(duì)位置信息。因

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

5、S MA X 的動(dòng)畫(huà)是基于關(guān)鍵幀而不是人機(jī)交互的。把這些模型轉(zhuǎn)換成O p e n G L 程序,再對(duì)其進(jìn)行控制則是一種比較理想的方法。在建模階段可以利用三維軟件建立模型,避免在O pe n G L 中用點(diǎn)、線和多邊形來(lái)建立三維立體模型的繁重的勞動(dòng);在控制階段,則可以通過(guò)O pe n G L 程序?qū)崿F(xiàn)對(duì)模型的人機(jī)交互調(diào)整,從而可以隨心所欲地利用現(xiàn)成的模型實(shí)現(xiàn)第18卷第3期2005年9月鹽城工學(xué)院學(xué)報(bào)(自然科學(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- -作者簡(jiǎn)介:王益群(1978-,男,江蘇建湖人,南京工業(yè)大學(xué)碩士研究生,高級(jí)程序員,研究方向:計(jì)算機(jī)應(yīng)用技術(shù)。虛擬現(xiàn)實(shí)。2實(shí)現(xiàn)方法462.1文件內(nèi)容的讀取2.1.1數(shù)據(jù)說(shuō)明在文件讀取前,首先需要定義一系列的結(jié)構(gòu)用來(lái)存放3D數(shù)據(jù),如對(duì)象的材質(zhì)、位置矢量、對(duì)象類(lèi)(C T r i O b j e c t和對(duì)象列表類(lèi)(C T r i L i s t等,下面對(duì)兩個(gè)重要的類(lèi)作簡(jiǎn)單說(shuō)明:(1C T r i O b j e c t類(lèi):主要用于處理3D S文件中的各種對(duì)象。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繪畫(huà)三角形v o i d c a l N o r m a l s(;/計(jì)算法向量.P r i v a t e:/對(duì)象基本的成員變量f l o a t*x;f l o a t*y;f l o a t*z;/三角形的頂點(diǎn)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類(lèi):用于處理對(duì)象序列,它是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;/增加對(duì)象.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對(duì)象的數(shù)目C T r i O b j e c t*o b j e c t s100;2.1.2對(duì)象的讀取文件的讀取工作實(shí)質(zhì)上是如何構(gòu)造C T r i L i s t 列表,也就是如何

9、從3D S文件中讀取數(shù)據(jù)來(lái)構(gòu)造C T r i O b j e c t對(duì)象,然后再組織到C t r i L i s t列表中。文件的讀取主要包括循環(huán)讀取3D對(duì)象所使用的材質(zhì),形體數(shù)據(jù)以及關(guān)鍵幀數(shù)據(jù)等,同時(shí)忽略其它一些不需要的數(shù)據(jù),這一切都是通過(guò)C3D S R e a d e r類(lèi)來(lái)實(shí)現(xiàn)的。(1C3D S R e a d e r類(lèi)的簡(jiǎn)單說(shuō)明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(.;/讀取頂點(diǎn)數(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(.;/讀取對(duì)象所用的材質(zhì)i n tR e a d T r i O b j e c t(.;/讀入對(duì)象數(shù)據(jù)i n tR e a d M a t E n t r y(.;/讀入材質(zhì)定義,并將其添加到材質(zhì)庫(kù)中i n tR e a d M D A T A(.;/讀取3D 對(duì)象模型數(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;/此鏈表用于存放形體對(duì)象數(shù)據(jù);(2讀取的過(guò)程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é)報(bào)(自然科學(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計(jì)算法向量在將3D S文件讀取后,就可以計(jì)算各個(gè)面的方向矢量。法線矢量指定哪個(gè)方向垂直于多邊形表面,用于光線和陰影計(jì)算。

15、它與實(shí)體的光照模型密切相關(guān),光線從不同入射角度到模型表面時(shí),顯示結(jié)果會(huì)有差別。如果忽略了法向量的計(jì)算,將不能重現(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ù)空間三個(gè)點(diǎn)計(jì)算兩個(gè)矢量值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;/計(jì)算法向矢量o u t0=v11*v22-v12*v21;o u t1=v12*v20-v10*v22;o u t2=v10*v21-v11*v20; 2.33D對(duì)象的繪制讀取了模型數(shù)據(jù),計(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的繪制命令才有效。同時(shí)還對(duì)O p e n G L 的一些默認(rèn)屬性進(jìn)行了一些設(shè)置,如繪圖模式、光照及材質(zhì)屬性等。(2處理O n S i z e事件,當(dāng)窗口大小發(fā)生改變時(shí),為了避免比例失調(diào),需要對(duì)視口和顯示比例進(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ù)來(lái)重畫(huà)。該事件處理程序是所有O p e n G L繪制程序的真正源頭,所有繪制命令都直接或間接地由該函數(shù)調(diào)用。繪制時(shí)是通過(guò)每一個(gè)C T r i O b j e c t 對(duì)象調(diào)用成員函數(shù)C T r i O b j e c t:d r a w G L(繪制每一個(gè)對(duì)象,從而在窗口中繪制出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ū)ο蟮姆椒▽?shí)現(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é)束語(yǔ)本文主要講述了結(jié)合面向?qū)ο蠛蚈 p e n G L 在V C +6.0環(huán)境下實(shí)現(xiàn)三維圖像的讀取,并在窗口中重繪。通過(guò)對(duì)本方法的了解,可以使用O pe n G L 的基本操作,來(lái)實(shí)現(xiàn)對(duì)3D S 文件隨心所欲的控制。把3D MA X 模型應(yīng)用于O p e n G L 中,降低了O p e n G L 復(fù)雜建模的難度,可以得到較真實(shí)的復(fù)雜物體模型。在飛行運(yùn)動(dòng)模擬的具體應(yīng)用中,利

22、用在O p e n G L 程序中引入3D MA X 各種模型,得到了滿(mǎn)意的三維動(dòng)畫(huà)效果。同樣,我們還可以編寫(xiě)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)動(dòng)虛擬仿真、商業(yè)廣告、游戲制作、影視采集、內(nèi)裝飾系統(tǒng)設(shè)計(jì)、服裝設(shè)計(jì)等多個(gè)領(lǐng)域。使用現(xiàn)成的3D S 文件,可以節(jié)省大量的重復(fù)且繁重的勞動(dòng),極大地提高了工作效率。參考文獻(xiàn):1孫波.O pe n G L 編程實(shí)例學(xué)習(xí)教程M .北京:北京大學(xué)出版社,2000.2王瑩瑩.在V C 中利用O p e n

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

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

最新文檔

評(píng)論

0/150

提交評(píng)論