国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

3DS與OBJ格式的三維模型文件在OpenGL中的輸入與處理

2013-12-10 14:07:22武警工程大學(xué)汪永剛
電子世界 2013年6期
關(guān)鍵詞:關(guān)鍵字多邊形頂點(diǎn)

武警工程大學(xué) 汪永剛

1.前言

OpenGL(開放圖形庫(kù))作為一個(gè)開放的三維圖形軟件包,它獨(dú)立于窗口系統(tǒng)和操作系統(tǒng),基于OpenGL開發(fā)的應(yīng)用程序可以十分方便地在各種平臺(tái)間移植。OpenGL的功能包括:建模、變換、顏色模式設(shè)置、紋理映射、位圖顯示以及雙緩存動(dòng)畫等,而且借助Windows編程環(huán)境可以方便地對(duì)所構(gòu)模型的人機(jī)交互進(jìn)行控制。由于其開放性和高度重用性,OpenGL已經(jīng)成為業(yè)界標(biāo)準(zhǔn)[1]。

雖然OpenGL提供了一些建立形體模型的命令,但OpenGL并沒有提供更為復(fù)雜的三維模型的高級(jí)命令。在這種情況下,如果完全通過基本的幾何圖元—點(diǎn)、線、多邊形來構(gòu)建模型,勢(shì)必十分困難;另一方面,由于3D圖形技術(shù)的發(fā)展,形成了非常多的3D建模軟件,這些軟件建模一般比較方便,但又難以對(duì)其進(jìn)行控制和交互。因此,如何有效地利用這些資源,對(duì)于快速開發(fā)可視化系統(tǒng)具有非常重要的意義。

作者在本文中對(duì)兩種流行的三維模型文件的文件格式進(jìn)行了介紹,并通過程序?qū)崿F(xiàn)了文件的讀取。把這些文件轉(zhuǎn)換成OpenGL程序,再對(duì)其進(jìn)行控制和交互操作。

2.3DS文件的輸入和處理

3D Studio Max是Autodesk公司開發(fā)的用于制作三維動(dòng)畫的應(yīng)用程序,它所生成的圖形文件格式是3DS文件格式。該軟件建模方便,且功能強(qiáng)大。因此,可以利用3D Studio Max對(duì)構(gòu)建可視化系統(tǒng)提供重要幫助。這里介紹一種將3DS文件轉(zhuǎn)換成OpenGL文件的簡(jiǎn)單方法。

這種轉(zhuǎn)換需要使用一個(gè)工具View3DS.exe(網(wǎng)上可下載)。轉(zhuǎn)換時(shí)將3DS文件拖到View3DS上,將彈出一個(gè)窗口,在窗口中會(huì)顯示需要轉(zhuǎn)換的3DS模型。在窗口上單擊鼠標(biāo)左鍵,會(huì)彈出一個(gè)菜單,選擇Export OpenGL CCode菜單項(xiàng),將會(huì)在當(dāng)前目錄中生成OpenGL程序,包括與模型名相同的.h和.gl二個(gè)文件[2]。

生成C代碼后,將模型的.h和.gl文件拷貝到當(dāng)前建立的工程目錄中,并在初始化部分加入以下代碼:

Model=GL3DS_initialize_modelName();

ModelName是指對(duì)應(yīng)于3DS模型的名稱,上面函數(shù)定義在生成的模型.h文件中。該函數(shù)運(yùn)用了顯示列表的技術(shù),可以提高顯示的速度。在模型繪制文件的開始部分,加入如下代碼:

#include“modelName.h”

最后,在繪制模型部分加入glCallList(Model),用OpenGL顯示列表技術(shù)實(shí)現(xiàn)圖形的顯示和重現(xiàn)。

3.OBJ文件的輸入和處理

OBJ文件是Alias/Wavefront公司開發(fā)的三維軟件Maya的一種數(shù)據(jù)輸出類型,它定義了對(duì)象的幾何和其它的一些特性。由于它的文件結(jié)構(gòu)非常簡(jiǎn)單,所以適合在應(yīng)用程序中讀取或進(jìn)行3D文件格式轉(zhuǎn)換[3]。

3.1 OBJ文件格式

OBJ文件既可以定義多邊形模型,也可以定義自由曲面模型。多邊形模型就是可以用點(diǎn)、線、面等基本元素構(gòu)造的模型,而自由曲面模型是指使用參數(shù)曲面造型定義的模型。下面是某個(gè)OBJ文件的一部分

v-0.7081257-0.08592043-0.19173051

v-0.7081257-0.11188304-0.19173063

v-0.7081257-0.0989018-0.19266948

……

vn-0.01888834-0.65014-0.7556138

vn-0.017401185-0.52368283-0.8475712

vn-0.2399254-0.961792-0.075679004

從上面可以看出,OBJ文件由文本行組成,每一行文本都是由一個(gè)關(guān)鍵字開頭,緊跟著后面是該關(guān)鍵字所表示含義的具體參數(shù)。例如,以“vn”開頭表示該行描述一個(gè)頂點(diǎn)法向量信息,后面一定會(huì)跟三個(gè)Double型的具體參數(shù),分別描述該頂點(diǎn)法向量的三維坐標(biāo)信息表1列出了OBJ文件中主要的關(guān)鍵字及其具體含義[4]。

表1 OBJ文件的關(guān)鍵字及其含義

頂點(diǎn)數(shù)據(jù)類型主要提供模型的以下參數(shù):

(1)頂點(diǎn)的幾何坐標(biāo)(v x y z w);

(2)頂點(diǎn)的紋理坐標(biāo)(vt u v w);

(3)頂點(diǎn)的法向量(vn I j k);

(4)空間參數(shù)點(diǎn)的坐標(biāo)(vp u v w)。

在OBJ文件中,點(diǎn)的坐標(biāo)的確定是右手坐標(biāo)系。

定義一個(gè)多邊形的語(yǔ)法如下:

fv/vt/vn v/vt/vn v/vt/vn…,其中省略號(hào)部分表示可以定義任意多邊的多邊形。其中v表示頂點(diǎn)的幾何坐標(biāo);vt表示頂點(diǎn)的紋理坐標(biāo);vn表示頂點(diǎn)的法向量,每個(gè)元素之間需用“/”符號(hào)隔開。例如,可用以下語(yǔ)句定義一個(gè)四邊形:f1/1/1 2/2/2 3/3/3 4/4/4。如果只有頂點(diǎn)坐標(biāo)和法向量坐標(biāo)(不含紋理坐標(biāo)),那就應(yīng)該使用“//”將坐標(biāo)隔開。例如只定義頂點(diǎn)坐標(biāo)和法向量坐標(biāo)的一個(gè)四邊形:f1//1 2//2 3//3 4//4。

3.2 OBJ文件的輸入處理

了解了OBJ文件的結(jié)構(gòu)后,為了能在程序中讀入模型,需要建立對(duì)應(yīng)的模型數(shù)據(jù)結(jié)構(gòu)。

程序中首先定義了OBJ文件對(duì)應(yīng)的結(jié)構(gòu)體,如對(duì)象頂點(diǎn)的結(jié)構(gòu)體、材質(zhì)描述結(jié)構(gòu)體和總的模型描述結(jié)構(gòu)體等。代碼如下:

程序中定義了一個(gè)全局變量:ModelContext*model。又實(shí)現(xiàn)了一個(gè)類,將OBJ文件的內(nèi)容讀入到全局變量中。在該類中定義了一些讀入函數(shù)

void readLineData(char*FileName);//讀入線數(shù)據(jù)

void readObjData(char*FileName);//讀其它對(duì)象數(shù)據(jù)

FILE* fileOpen(const char* filename,constchar*model);//打開文件

獲取了全局變量后,就可以在視圖類中繪制所得到的對(duì)象模型,然后對(duì)模型進(jìn)行操作和交互式處理。

4.小結(jié)

本文簡(jiǎn)要介紹了3DS和OBJ兩種3D文件格式在OpenGL中的輸入和處理方法?,F(xiàn)在3D文件資源十分豐富,要充分利用這些資源,文件格式的轉(zhuǎn)換具有十分重要的意義。在轉(zhuǎn)換為OpenGL程序后,就可以利用OpenGL的強(qiáng)大功能來進(jìn)行三維分析和交互操作,其成果可以適用于地形建模、城市規(guī)劃以及虛擬現(xiàn)實(shí)等許多領(lǐng)域。

[1]郭景,雷鳴.3DSMAX模型在OpenGL中的讀取與重現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2009,5.

[2]胡平平,劉建明,王晶杰.OpenGL顯示3DS模型若干問題的研究[J].工程圖學(xué)學(xué)報(bào),2010,8.

[3]向南平,江資斌,左廷英.OpenGL中Maya模型的應(yīng)用[J].微型電腦應(yīng)用,2009,18.

[4]王金峰,姚國(guó)清.三維模型文件中的OBJ格式在OpenGL中的輸入與處理[J].電腦知識(shí)與技術(shù),2011,4.

[5]陳炳發(fā),陸楠,伍鐵軍.一種面向OpenGL的三維模型的轉(zhuǎn)化方法[J].小型微型計(jì)算機(jī)系統(tǒng),2010(25).

猜你喜歡
關(guān)鍵字多邊形頂點(diǎn)
多邊形中的“一個(gè)角”問題
履職盡責(zé)求實(shí)效 真抓實(shí)干勇作為——十個(gè)關(guān)鍵字,盤點(diǎn)江蘇統(tǒng)戰(zhàn)的2021
過非等腰銳角三角形頂點(diǎn)和垂心的圓的性質(zhì)及應(yīng)用(下)
多邊形的藝術(shù)
解多邊形題的轉(zhuǎn)化思想
成功避開“關(guān)鍵字”
多邊形的鑲嵌
關(guān)于頂點(diǎn)染色的一個(gè)猜想
基于用戶反饋的關(guān)系數(shù)據(jù)庫(kù)關(guān)鍵字查詢系統(tǒng)
誘導(dǎo)性虛假下載鏈接不完全評(píng)測(cè)
板桥市| 综艺| 东辽县| 重庆市| 诸城市| 宁波市| 定结县| 明水县| 青川县| 宣汉县| 屏东市| 郯城县| 平塘县| 错那县| 皮山县| 娱乐| 阿克陶县| 灯塔市| 娄烦县| 平定县| 霸州市| 玛纳斯县| 新龙县| 疏附县| 石林| 永平县| 望江县| 额济纳旗| 合作市| 崇仁县| 天津市| 平南县| 古交市| 习水县| 张家港市| 白沙| 磐石市| 华安县| 始兴县| 柳州市| 黑水县|