陳 蕾,趙正旭,陶 智
(石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,河北 石家莊 050043)
3DS文件特征提取器的設(shè)計(jì)與實(shí)現(xiàn)
陳 蕾,趙正旭,陶 智
(石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,河北 石家莊 050043)
深空探測可視化系統(tǒng)中存在著數(shù)以萬計(jì)的三維模型,這些模型雜亂無章,將其規(guī)范化管理的方法之一就是分類編碼。為此,選取天體模型作為3DS(3DStudio)格式的文件,并在進(jìn)行分類編碼時(shí)選擇文件的十個(gè)重要特征作為分類點(diǎn)。為了科學(xué)地提取3DS文件特征并為后期分類編碼提供準(zhǔn)確的文件信息,設(shè)計(jì)并提出了一個(gè)3DS文件特征提取器。該提取器通過輸入3DS文件解析其塊結(jié)構(gòu),從中提取材質(zhì)、貼圖、頂點(diǎn)、對象數(shù)等十個(gè)目標(biāo)特征信息,并根據(jù)塊ID識別重要塊并以txt格式輸出。為驗(yàn)證所提出提取器的有效性和可行性,以土衛(wèi)三作為驗(yàn)證實(shí)例,通過提取結(jié)果來檢驗(yàn)所提出文件特征提取器的科學(xué)性、規(guī)范性和適用性。驗(yàn)證實(shí)驗(yàn)結(jié)果表明,所設(shè)計(jì)的提取器提取到的模型特征信息與實(shí)際模型屬性信息相吻合,能夠?qū)崿F(xiàn)對目標(biāo)模型的指定信息提取,且提取數(shù)據(jù)真實(shí)有效,為提取模型文件特征提供了一個(gè)科學(xué)、規(guī)范的方法,對于天體模型的規(guī)范化管理具有一定的參考價(jià)值。
規(guī)范化;3DS;塊ID;特征提取
在深空探測三維可視化仿真過程中,可視化仿真程序需要將場景模型文件調(diào)入內(nèi)存,并對三維場景模型加以組織、控制、管理、調(diào)度等[1]。深空探測可視化技術(shù)中,三維模型是關(guān)鍵,作為可視化系統(tǒng)的資源基礎(chǔ),研發(fā)人員對三維模型進(jìn)行了相關(guān)研究[2-4],但是由于沒有一個(gè)系統(tǒng)的管理規(guī)范,大量的三維模型還是不容易被調(diào)用。因此,如何統(tǒng)一管理這些三維模型,成為促進(jìn)可視化系統(tǒng)快速發(fā)展的重中之重。
對于深空探測實(shí)時(shí)可視化系統(tǒng)中成千上萬的三維模型,不同星系之間模型的格式可能存在互不兼容的問題,比如銀河系和太陽系之間的模型不能相互調(diào)用,影響了系統(tǒng)的運(yùn)行速度和整體性能,因此需要對整個(gè)系統(tǒng)中所有三維模型制定統(tǒng)一的管理規(guī)范,優(yōu)化系統(tǒng)的功能和性能。對三維模型的規(guī)范化管理,可以有效地提高目標(biāo)三維模型的調(diào)用速度和精確度,將模型文件規(guī)范化,可以減小內(nèi)存占用率,縮短模型調(diào)用時(shí)間,保證三維模型使用的實(shí)時(shí)性,促進(jìn)航天事業(yè)的發(fā)展。
近年來,由于3D技術(shù)的快速發(fā)展,市場應(yīng)用越來越廣泛,對于三維模型的研究也越來越多[5-8]。三維模型的格式各種各樣,3DS是一種比較通用的模型格式[9-10],可以導(dǎo)入到不同的建模軟件,不管是建模人員還是后期使用人員,都能靈活操作。3DS文件由許多塊組成,每個(gè)塊代表特定的信息,包括塊ID、塊長度和塊數(shù)據(jù)。3DS文件格式并不是一些基本的塊堆積而成的,而是一個(gè)復(fù)雜而有序的整體,大塊包含小塊的層級結(jié)構(gòu)。事實(shí)上一個(gè)3DS文件有上千個(gè)塊(chunk),它們構(gòu)成了一個(gè)復(fù)雜靈活的文件系統(tǒng),不需要知道所有塊就可以順利地讀完整個(gè)文件,只對所需的目標(biāo)特征做信息提取即可。研究主要是針對一個(gè)模型文件,提取文件中十二個(gè)目標(biāo)信息,作為信息分類點(diǎn)對三維模型進(jìn)行分類編碼,因此,選擇3DS格式的文件作為研究對象。
在對3DS文件進(jìn)行分類編碼時(shí),需要提取文件的特征作為分類點(diǎn),對于每一個(gè)分類點(diǎn),具體信息可以通過將模型導(dǎo)入3dsMax[11]查看,但是這大大增加了工作量,操作不方便,也不科學(xué)。針對這個(gè)問題,設(shè)計(jì)并提出了一個(gè)自動(dòng)提取文件特征信息的提取器,能夠更科學(xué)地提取文件信息。
對于一個(gè)3DS文件,塊結(jié)構(gòu)和讀取規(guī)則在文獻(xiàn)[12-13]中已經(jīng)詳細(xì)介紹,這里通過一個(gè)天體模型對3DS文件結(jié)構(gòu)做實(shí)例分析。首先通過建模軟件3dsMax2010創(chuàng)建一個(gè)土衛(wèi)三(Tethys)的模型文件,如圖1所示。
圖1 3dsMax打開土衛(wèi)三.3DS的三維模型
3dsMax建模軟件自身保存格式為max,所以不能直接保存文件,必須要導(dǎo)出3DS格式。通過工具C32asm讀取土衛(wèi)三模型的3DS文件,打開十六進(jìn)制數(shù)據(jù)信息,如圖2所示。
圖2 3DS格式的土衛(wèi)三十六進(jìn)制數(shù)據(jù)
從圖中可以直接看出,這個(gè)十六進(jìn)制數(shù)據(jù)序列是以4D4D開始的,也就是3DS文件的主塊Ox4D4D,因此可以判定這是一個(gè)3DS文件。這個(gè)數(shù)據(jù)序列也將3DS文件的塊ID、長度以及數(shù)據(jù)依次陳列,在后期提取目標(biāo)信息時(shí),只需要查找其塊ID,讀取數(shù)據(jù)即可。
2.1整體設(shè)計(jì)流程
對3DS文件進(jìn)行特征信息提取時(shí),需要將文件導(dǎo)入提取器中,對文件格式進(jìn)行判斷,非3DS文件需要轉(zhuǎn)換格式再次提取,然后再根據(jù)塊ID提取信息。3DS文件特征信息提取器的整體設(shè)計(jì)流程如圖3所示。
圖3 提取器整體設(shè)計(jì)流程
2.2特征選取
根據(jù)提取器的整體設(shè)計(jì),需要通過預(yù)制定的分類編碼規(guī)范選取3DS文件的目標(biāo)特征選項(xiàng),然后提取具體模型的目標(biāo)特征信息,根據(jù)這些信息為該模型賦予序列碼。
通過研究3DS文件,首先判斷該文件是不是3DS文件,然后就是模型的屬性,分別為材質(zhì)、紋理、貼圖、頂點(diǎn)、面、對象、是否是動(dòng)畫,根據(jù)這些分類選項(xiàng),從3DS文件中選取到的文件塊及ID分別為:
Ox4D4D:主塊;
0xAFFF:紋理信息;
OxA000:材質(zhì)名稱;
0xA300:帖圖名稱;
0xB000:關(guān)鍵幀主塊;
0x4120:面信息,包括面?zhèn)€數(shù);
Ox4000:對象信息,包括對象個(gè)數(shù);
0x4110:頂點(diǎn)信息,包括頂點(diǎn)個(gè)數(shù)。
根據(jù)以上選取的八個(gè)塊ID和信息,可以設(shè)計(jì)算法實(shí)現(xiàn)信息提取,滿足后期所需的十個(gè)分類特征選項(xiàng),分別為:3ds格式文件、模型有無材質(zhì)、模型有無紋理、材質(zhì)貼圖格式、有無關(guān)鍵幀、模型頂點(diǎn)數(shù)、模型的面數(shù)、模型對象數(shù)、材質(zhì)數(shù)、材質(zhì)名稱。
3DS文件提取器主要以Qt應(yīng)用程序框架QtCreator集成環(huán)境開發(fā),使用C++語言編寫。程序中沒有采用系統(tǒng)自帶的Qt Designer控件來設(shè)計(jì)界面,GUI中的菜單、按鈕和文本框主要采用純代碼實(shí)現(xiàn),方便系統(tǒng)程序的管理和維護(hù)。
3.1業(yè)務(wù)功能實(shí)現(xiàn)
系統(tǒng)分析和提取3DS文件信息代碼采用模塊化技術(shù),每一個(gè)模塊負(fù)責(zé)完成一個(gè)功能的具體實(shí)現(xiàn),比如分析頂點(diǎn)數(shù)、面數(shù)、模型個(gè)數(shù)、貼圖數(shù)量和記錄并將各個(gè)值顯示到界面上,思路清晰,代碼流暢。
提取器的界面主要包括標(biāo)簽顯示和文本框輸出兩部分,通過單擊“文件”下拉菜單,可以選擇導(dǎo)入文件,對3DS進(jìn)行信息提取,并在前臺界面顯示。如果導(dǎo)入的非3DS文件,則會(huì)彈出“This is not 3DS file!”的提示框,提醒重新選擇文件。
對3DS文件信息提取完畢之后,在“文件”下拉菜單中有“導(dǎo)出”選項(xiàng),前臺界面顯示輸入文件的特征信息,之后將該信息導(dǎo)出為txt文件保存,供后期分類編碼時(shí)使用。
3.2算法設(shè)計(jì)
設(shè)計(jì)算法時(shí),首先需要對每一個(gè)目標(biāo)特征塊進(jìn)行宏定義,每一個(gè)塊名稱和塊ID要對應(yīng)。下面列舉了其中兩個(gè)定義方法,其他特征塊的定義方法同理。
#define MAIN3DS Ox4D4D //定義主塊
#define OBJ_VERTICES Ox4110 //定義頂點(diǎn)塊
在頂點(diǎn)讀取函數(shù)中,使用字節(jié)讀取文件指針函數(shù),每讀取兩個(gè)字節(jié),頂點(diǎn)數(shù)加1,直至讀取完畢。代碼為:
pPreChunk->bytesRead+=fread(&(pObject->numOf
Verts),1,2,m_FilePointer);
在讀取對象材質(zhì)塊中,使用getstring函數(shù)獲取材質(zhì)字符串之后,使用字符串分離函數(shù),提取后綴名,即可得到材質(zhì)貼圖格式。代碼為:
itextureFormat_temp=g_3DModel.pMaterials.constData()->straFile;itextureFormat=itextureFormat_temp.section(‘.’,1,1);
對于多個(gè)對象,它們是緊接著保存在3DS文件中,如果有n個(gè)對象,文件中就會(huì)有n個(gè)Ox4000,讀取時(shí)通過讀取對象數(shù)來判斷該文件一共有幾個(gè)Ox4000塊,即對象數(shù)。在讀取下一數(shù)據(jù)塊函數(shù)中,使用switch語句與對象塊ID號進(jìn)行匹配,如果二者相等,則對象數(shù)加1,不相等則不執(zhí)行加1操作,繼續(xù)讀取下一塊,直到文件全部讀取完畢。核心代碼如下:
Switch(m_CurrentChunk->ID)
{Case OBJECT:
pModel->numOfObjects++;
ReadNextObjChunk ( )}
貼圖數(shù)量的讀取方法同上。代碼為:
Switch(m_CurrentChunk->ID)
{Case MATERIAL:
pModel->numOfMaterials++;
pModel->pMaterials.push_back(newTexture);
ReaNextMatChunk(pModel,m_CurrentChunk);
Break; }
另一個(gè)值得注意的是對不必要塊的跳過。3DS文件結(jié)構(gòu)圖雖然龐大,由許多塊組成,但實(shí)際上只需要用到里面少數(shù)幾個(gè)重要塊的信息,當(dāng)遇到不重要的塊時(shí)就不需要讀取此塊的詳細(xì)信息,直接跳到下一個(gè)塊。所以,只選取了與分類編碼規(guī)范相關(guān)的幾個(gè)重要塊,對于其他塊選擇跳過。跳過方法為:判斷一個(gè)塊的ID是不是所需的,如果需要直接讀取,否則只需讀取塊長度信息,由于塊ID加長度一共6個(gè)字節(jié),所以跳過時(shí)只需將文件指針向前移動(dòng)N-6個(gè)字節(jié)(N為塊長度)[14]。代碼如下:
m_Current->bytesRead+=fread(buffer,1,m_CurrentChunk->length-m_CurrentChunk->bytesRead,m_FilePointer);
3.3實(shí)例應(yīng)用
在分析土衛(wèi)三3DS模型的基礎(chǔ)上,通過3dsMax軟件導(dǎo)入土衛(wèi)三的3DS模型,查看模型屬性信息如下:模型格式為3DS,有材質(zhì),有紋理,貼圖格式為JPG,像素為2 048*1 024,頂點(diǎn)數(shù)為18 908,面數(shù)為36 400,對象數(shù)為1,無顏色、無陰影,無動(dòng)畫,屬于靜態(tài)模型。
利用上一節(jié)設(shè)計(jì)實(shí)現(xiàn)的3DS文件特征信息提取器對該模型進(jìn)行信息提取,結(jié)果如圖4所示。
輸入文件提取特征信息之后,通過文件導(dǎo)出另存為txt文本文檔,如圖5所示,這些信息在后期可以供模型分類編碼使用。
通過實(shí)例提取,發(fā)現(xiàn)提取到的模型特征信息與實(shí)際模型屬性信息相吻合,驗(yàn)證了3DS文件特征信息提取器的實(shí)用性和科學(xué)性。
圖4 Tethys.3DS的提取結(jié)果
圖5 提取結(jié)果的txt文件導(dǎo)出
一個(gè)3DS文件包含很復(fù)雜的模型信息,但是并不是所有信息都是有用的。為了規(guī)范化管理3DS模型,需要從中提取所需的特征信息,將其導(dǎo)出保存為txt文件,供后期模型分類編碼時(shí)讀取。因此,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)3DS文件特征信息提取器,可以科學(xué)地提取模型屬性信息。研究結(jié)果表明,該提取器可以對一個(gè)3DS模型文件進(jìn)行特征信息提取,以指定的格式輸出一個(gè)txt文本,列出所需信息的清單。
下一步的工作是在分類編碼器中讀取該txt文本文檔,將所需信息顯示在分類編碼器的頁面上,然后根據(jù)特征信息在分類選項(xiàng)區(qū)選擇各項(xiàng)內(nèi)容,生成序列碼,為該模型分類編碼,并從后臺數(shù)據(jù)庫調(diào)出對應(yīng)二維圖片,如果不存在該模型,則將序列碼保存至數(shù)據(jù)庫供以后調(diào)用。
[1] 藍(lán)朝楨,李建勝,周 楊,等.深空探測三維可視化技術(shù)研究[C]//中國宇航學(xué)會(huì)深空探測技術(shù)專業(yè)委員會(huì)學(xué)術(shù)會(huì)議.出版地不詳:出版者不詳,2005.
[2] 趙正旭,張廷廷.FreeForm觸覺設(shè)計(jì)系統(tǒng)的操作與使用[M].石家莊:河北人民出版社,2015.
[3] 趙正旭,張廷廷.基于FreeForm與3dsMax建模的三維打印[J].計(jì)算機(jī)應(yīng)用,2016,36:180-183.
[4] 趙正旭,張登輝.STL模型的快速壓縮算法與可視化研究[J].電氣工程與自動(dòng)化:中英文版,2015,4(2):13-17.
[5] Wang Y,Lu T,Gao R,et al.3D model comparison through kernel density matching[C]//20th international conference on pattern recognition.[s.l.]:IEEE,2010:3159-3162.
[6] Lu K,Wang Q,Xue J,et al.3D model retrieval and classification by semi-supervised learning with content-based similarity[J].Information Sciences,2014,281:703-713.
[7] Song M,Sun Z,Liu K,et al.Iterative 3D shape classification by online metric learning[J].Computer Aided Geometric Design,2015,35(C):192-205.
[8] Tangelder J W H,Veltkamp R C.A survey of contend based 3D shape retrieval methods[J].Multimedia Tools and Applications,2008,39(3):441-471.
[9] 劉 芳,劉賢梅.3DS文件讀取、繪制與控制方法的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(19):4575-4578.
[10] Autodesk公司官方3ds文件格式介紹[EB/OL].[2015-11-15].http://download.csdn.net/detail/whucv/4851225.
[11] 3dsmax[EB/OL].[2016-08-01].http://baike.baidu.com/view/11137.htm#reference-[1]-11137-wrap.
[12] 杜 琳,蔣 輝.VC++中利用DirectX實(shí)現(xiàn)3DS文件的讀取和控制[J].計(jì)算機(jī)時(shí)代,2010(1):41-43.
[13] 劉 爽,張恒博.三維建模軟件3ds Max數(shù)據(jù)文件3ds的解析[J].大連民族學(xué)院學(xué)報(bào),2012,14(3):260-264.
[14] 楊 帆,楊克儉,王玉華,等.3DS文件格式與自定義文件格式的轉(zhuǎn)換[J].交通與計(jì)算機(jī),2004,22(3):101-104.
DesignandImplementationof3DSFileFeatureExtractor
CHEN Lei,ZHAO Zheng-xu,TAO Zhi
(School of Information Science and Technology,Shijiazhuang Tiedao University,Shijiazhuang 050043,China)
There are massive 3D models in visiualization system of outer space missions,all of which are disorganized in a mess and need to be classified with classification coding method for standardized management.Therefore 3DS (3DStudio) files format is chosen to describe the celestial models and 10 key features of these 3DS files are selected as classification characterastics during classifying and coding.In order to extract the features of the 3DS files and to provide accurate file information for subsequent classifying and coding,a 3DS file feature extractor is proposed and designed which parses the block structure of the 3DS file and extracts the 10 specified features including material,texture,vertex,object number and so on,to identify important blocks and output file in txt format according to block ID.In order to verify its effectiveness and applicability in engineering applications,the Tethys model is chosen as an example,with which the extracted results are analyzed to prove its scientificity,normalization and applicability.The experiment results show that feature information extracted from the proposed extractor is consistent with the actual attribute information and it has implemented the specific information extraction of object model with real and effective data,which has supplied a scientific and normative method for features extraction of model files with a reference value for normative management of the celestial models.
standardization;3DS;chunk ID;feature extraction
TP301
A
1673-629X(2017)10-0161-04
2016-11-15
2017-03-07 < class="emphasis_bold">網(wǎng)絡(luò)出版時(shí)間
時(shí)間:2017-07-19
河北省高層次人才科學(xué)研究計(jì)劃項(xiàng)目(GCC2014010)
陳 蕾(1991-),女,碩士研究生,研究方向?yàn)槿S建模、分類編碼;趙正旭,博士,教授,研究方向?yàn)樘摂M可視化。
http://kns.cnki.net/kcms/detail/61.1450.tp.20170719.1110.052.html
10.3969/j.issn.1673-629X.2017.10.034