陳 蕾,趙正旭,陶 智
(石家莊鐵道大學 信息科學與技術學院,河北 石家莊 050043)
3DS文件特征提取器的設計與實現
陳 蕾,趙正旭,陶 智
(石家莊鐵道大學 信息科學與技術學院,河北 石家莊 050043)
深空探測可視化系統中存在著數以萬計的三維模型,這些模型雜亂無章,將其規范化管理的方法之一就是分類編碼。為此,選取天體模型作為3DS(3DStudio)格式的文件,并在進行分類編碼時選擇文件的十個重要特征作為分類點。為了科學地提取3DS文件特征并為后期分類編碼提供準確的文件信息,設計并提出了一個3DS文件特征提取器。該提取器通過輸入3DS文件解析其塊結構,從中提取材質、貼圖、頂點、對象數等十個目標特征信息,并根據塊ID識別重要塊并以txt格式輸出。為驗證所提出提取器的有效性和可行性,以土衛三作為驗證實例,通過提取結果來檢驗所提出文件特征提取器的科學性、規范性和適用性。驗證實驗結果表明,所設計的提取器提取到的模型特征信息與實際模型屬性信息相吻合,能夠實現對目標模型的指定信息提取,且提取數據真實有效,為提取模型文件特征提供了一個科學、規范的方法,對于天體模型的規范化管理具有一定的參考價值。
規范化;3DS;塊ID;特征提取
在深空探測三維可視化仿真過程中,可視化仿真程序需要將場景模型文件調入內存,并對三維場景模型加以組織、控制、管理、調度等[1]。深空探測可視化技術中,三維模型是關鍵,作為可視化系統的資源基礎,研發人員對三維模型進行了相關研究[2-4],但是由于沒有一個系統的管理規范,大量的三維模型還是不容易被調用。因此,如何統一管理這些三維模型,成為促進可視化系統快速發展的重中之重。
對于深空探測實時可視化系統中成千上萬的三維模型,不同星系之間模型的格式可能存在互不兼容的問題,比如銀河系和太陽系之間的模型不能相互調用,影響了系統的運行速度和整體性能,因此需要對整個系統中所有三維模型制定統一的管理規范,優化系統的功能和性能。對三維模型的規范化管理,可以有效地提高目標三維模型的調用速度和精確度,將模型文件規范化,可以減小內存占用率,縮短模型調用時間,保證三維模型使用的實時性,促進航天事業的發展。
近年來,由于3D技術的快速發展,市場應用越來越廣泛,對于三維模型的研究也越來越多[5-8]。三維模型的格式各種各樣,3DS是一種比較通用的模型格式[9-10],可以導入到不同的建模軟件,不管是建模人員還是后期使用人員,都能靈活操作。3DS文件由許多塊組成,每個塊代表特定的信息,包括塊ID、塊長度和塊數據。3DS文件格式并不是一些基本的塊堆積而成的,而是一個復雜而有序的整體,大塊包含小塊的層級結構。事實上一個3DS文件有上千個塊(chunk),它們構成了一個復雜靈活的文件系統,不需要知道所有塊就可以順利地讀完整個文件,只對所需的目標特征做信息提取即可。研究主要是針對一個模型文件,提取文件中十二個目標信息,作為信息分類點對三維模型進行分類編碼,因此,選擇3DS格式的文件作為研究對象。
在對3DS文件進行分類編碼時,需要提取文件的特征作為分類點,對于每一個分類點,具體信息可以通過將模型導入3dsMax[11]查看,但是這大大增加了工作量,操作不方便,也不科學。針對這個問題,設計并提出了一個自動提取文件特征信息的提取器,能夠更科學地提取文件信息。
對于一個3DS文件,塊結構和讀取規則在文獻[12-13]中已經詳細介紹,這里通過一個天體模型對3DS文件結構做實例分析。首先通過建模軟件3dsMax2010創建一個土衛三(Tethys)的模型文件,如圖1所示。

圖1 3dsMax打開土衛三.3DS的三維模型
3dsMax建模軟件自身保存格式為max,所以不能直接保存文件,必須要導出3DS格式。通過工具C32asm讀取土衛三模型的3DS文件,打開十六進制數據信息,如圖2所示。

圖2 3DS格式的土衛三十六進制數據
從圖中可以直接看出,這個十六進制數據序列是以4D4D開始的,也就是3DS文件的主塊Ox4D4D,因此可以判定這是一個3DS文件。這個數據序列也將3DS文件的塊ID、長度以及數據依次陳列,在后期提取目標信息時,只需要查找其塊ID,讀取數據即可。
2.1整體設計流程
對3DS文件進行特征信息提取時,需要將文件導入提取器中,對文件格式進行判斷,非3DS文件需要轉換格式再次提取,然后再根據塊ID提取信息。3DS文件特征信息提取器的整體設計流程如圖3所示。

圖3 提取器整體設計流程
2.2特征選取
根據提取器的整體設計,需要通過預制定的分類編碼規范選取3DS文件的目標特征選項,然后提取具體模型的目標特征信息,根據這些信息為該模型賦予序列碼。
通過研究3DS文件,首先判斷該文件是不是3DS文件,然后就是模型的屬性,分別為材質、紋理、貼圖、頂點、面、對象、是否是動畫,根據這些分類選項,從3DS文件中選取到的文件塊及ID分別為:
Ox4D4D:主塊;
0xAFFF:紋理信息;
OxA000:材質名稱;
0xA300:帖圖名稱;
0xB000:關鍵幀主塊;
0x4120:面信息,包括面個數;
Ox4000:對象信息,包括對象個數;
0x4110:頂點信息,包括頂點個數。
根據以上選取的八個塊ID和信息,可以設計算法實現信息提取,滿足后期所需的十個分類特征選項,分別為:3ds格式文件、模型有無材質、模型有無紋理、材質貼圖格式、有無關鍵幀、模型頂點數、模型的面數、模型對象數、材質數、材質名稱。
3DS文件提取器主要以Qt應用程序框架QtCreator集成環境開發,使用C++語言編寫。程序中沒有采用系統自帶的Qt Designer控件來設計界面,GUI中的菜單、按鈕和文本框主要采用純代碼實現,方便系統程序的管理和維護。
3.1業務功能實現
系統分析和提取3DS文件信息代碼采用模塊化技術,每一個模塊負責完成一個功能的具體實現,比如分析頂點數、面數、模型個數、貼圖數量和記錄并將各個值顯示到界面上,思路清晰,代碼流暢。
提取器的界面主要包括標簽顯示和文本框輸出兩部分,通過單擊“文件”下拉菜單,可以選擇導入文件,對3DS進行信息提取,并在前臺界面顯示。如果導入的非3DS文件,則會彈出“This is not 3DS file!”的提示框,提醒重新選擇文件。
對3DS文件信息提取完畢之后,在“文件”下拉菜單中有“導出”選項,前臺界面顯示輸入文件的特征信息,之后將該信息導出為txt文件保存,供后期分類編碼時使用。
3.2算法設計
設計算法時,首先需要對每一個目標特征塊進行宏定義,每一個塊名稱和塊ID要對應。下面列舉了其中兩個定義方法,其他特征塊的定義方法同理。
#define MAIN3DS Ox4D4D //定義主塊
#define OBJ_VERTICES Ox4110 //定義頂點塊
在頂點讀取函數中,使用字節讀取文件指針函數,每讀取兩個字節,頂點數加1,直至讀取完畢。代碼為:
pPreChunk->bytesRead+=fread(&(pObject->numOf
Verts),1,2,m_FilePointer);
在讀取對象材質塊中,使用getstring函數獲取材質字符串之后,使用字符串分離函數,提取后綴名,即可得到材質貼圖格式。代碼為:
itextureFormat_temp=g_3DModel.pMaterials.constData()->straFile;itextureFormat=itextureFormat_temp.section(‘.’,1,1);
對于多個對象,它們是緊接著保存在3DS文件中,如果有n個對象,文件中就會有n個Ox4000,讀取時通過讀取對象數來判斷該文件一共有幾個Ox4000塊,即對象數。在讀取下一數據塊函數中,使用switch語句與對象塊ID號進行匹配,如果二者相等,則對象數加1,不相等則不執行加1操作,繼續讀取下一塊,直到文件全部讀取完畢。核心代碼如下:
Switch(m_CurrentChunk->ID)
{Case OBJECT:
pModel->numOfObjects++;
ReadNextObjChunk ( )}
貼圖數量的讀取方法同上。代碼為:
Switch(m_CurrentChunk->ID)
{Case MATERIAL:
pModel->numOfMaterials++;
pModel->pMaterials.push_back(newTexture);
ReaNextMatChunk(pModel,m_CurrentChunk);
Break; }
另一個值得注意的是對不必要塊的跳過。3DS文件結構圖雖然龐大,由許多塊組成,但實際上只需要用到里面少數幾個重要塊的信息,當遇到不重要的塊時就不需要讀取此塊的詳細信息,直接跳到下一個塊。所以,只選取了與分類編碼規范相關的幾個重要塊,對于其他塊選擇跳過。跳過方法為:判斷一個塊的ID是不是所需的,如果需要直接讀取,否則只需讀取塊長度信息,由于塊ID加長度一共6個字節,所以跳過時只需將文件指針向前移動N-6個字節(N為塊長度)[14]。代碼如下:
m_Current->bytesRead+=fread(buffer,1,m_CurrentChunk->length-m_CurrentChunk->bytesRead,m_FilePointer);
3.3實例應用
在分析土衛三3DS模型的基礎上,通過3dsMax軟件導入土衛三的3DS模型,查看模型屬性信息如下:模型格式為3DS,有材質,有紋理,貼圖格式為JPG,像素為2 048*1 024,頂點數為18 908,面數為36 400,對象數為1,無顏色、無陰影,無動畫,屬于靜態模型。
利用上一節設計實現的3DS文件特征信息提取器對該模型進行信息提取,結果如圖4所示。
輸入文件提取特征信息之后,通過文件導出另存為txt文本文檔,如圖5所示,這些信息在后期可以供模型分類編碼使用。
通過實例提取,發現提取到的模型特征信息與實際模型屬性信息相吻合,驗證了3DS文件特征信息提取器的實用性和科學性。

圖4 Tethys.3DS的提取結果

圖5 提取結果的txt文件導出
一個3DS文件包含很復雜的模型信息,但是并不是所有信息都是有用的。為了規范化管理3DS模型,需要從中提取所需的特征信息,將其導出保存為txt文件,供后期模型分類編碼時讀取。因此,設計并實現了一個3DS文件特征信息提取器,可以科學地提取模型屬性信息。研究結果表明,該提取器可以對一個3DS模型文件進行特征信息提取,以指定的格式輸出一個txt文本,列出所需信息的清單。
下一步的工作是在分類編碼器中讀取該txt文本文檔,將所需信息顯示在分類編碼器的頁面上,然后根據特征信息在分類選項區選擇各項內容,生成序列碼,為該模型分類編碼,并從后臺數據庫調出對應二維圖片,如果不存在該模型,則將序列碼保存至數據庫供以后調用。
[1] 藍朝楨,李建勝,周 楊,等.深空探測三維可視化技術研究[C]//中國宇航學會深空探測技術專業委員會學術會議.出版地不詳:出版者不詳,2005.
[2] 趙正旭,張廷廷.FreeForm觸覺設計系統的操作與使用[M].石家莊:河北人民出版社,2015.
[3] 趙正旭,張廷廷.基于FreeForm與3dsMax建模的三維打印[J].計算機應用,2016,36:180-183.
[4] 趙正旭,張登輝.STL模型的快速壓縮算法與可視化研究[J].電氣工程與自動化:中英文版,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文件讀取、繪制與控制方法的研究與應用[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實現3DS文件的讀取和控制[J].計算機時代,2010(1):41-43.
[13] 劉 爽,張恒博.三維建模軟件3ds Max數據文件3ds的解析[J].大連民族學院學報,2012,14(3):260-264.
[14] 楊 帆,楊克儉,王玉華,等.3DS文件格式與自定義文件格式的轉換[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">網絡出版時間
時間:2017-07-19
河北省高層次人才科學研究計劃項目(GCC2014010)
陳 蕾(1991-),女,碩士研究生,研究方向為三維建模、分類編碼;趙正旭,博士,教授,研究方向為虛擬可視化。
http://kns.cnki.net/kcms/detail/61.1450.tp.20170719.1110.052.html
10.3969/j.issn.1673-629X.2017.10.034