3DS文件特征提取器的设计与实现
2017-10-23赵正旭
陈 蕾,赵正旭,陶 智
(石家庄铁道大学 信息科学与技术学院,河北 石家庄 050043)
3DS文件特征提取器的设计与实现
陈 蕾,赵正旭,陶 智
(石家庄铁道大学 信息科学与技术学院,河北 石家庄 050043)
深空探测可视化系统中存在着数以万计的三维模型,这些模型杂乱无章,将其规范化管理的方法之一就是分类编码。为此,选取天体模型作为3DS(3DStudio)格式的文件,并在进行分类编码时选择文件的十个重要特征作为分类点。为了科学地提取3DS文件特征并为后期分类编码提供准确的文件信息,设计并提出了一个3DS文件特征提取器。该提取器通过输入3DS文件解析其块结构,从中提取材质、贴图、顶点、对象数等十个目标特征信息,并根据块ID识别重要块并以txt格式输出。为验证所提出提取器的有效性和可行性,以土卫三作为验证实例,通过提取结果来检验所提出文件特征提取器的科学性、规范性和适用性。验证实验结果表明,所设计的提取器提取到的模型特征信息与实际模型属性信息相吻合,能够实现对目标模型的指定信息提取,且提取数据真实有效,为提取模型文件特征提供了一个科学、规范的方法,对于天体模型的规范化管理具有一定的参考价值。
规范化;3DS;块ID;特征提取
0 引 言
在深空探测三维可视化仿真过程中,可视化仿真程序需要将场景模型文件调入内存,并对三维场景模型加以组织、控制、管理、调度等[1]。深空探测可视化技术中,三维模型是关键,作为可视化系统的资源基础,研发人员对三维模型进行了相关研究[2-4],但是由于没有一个系统的管理规范,大量的三维模型还是不容易被调用。因此,如何统一管理这些三维模型,成为促进可视化系统快速发展的重中之重。
对于深空探测实时可视化系统中成千上万的三维模型,不同星系之间模型的格式可能存在互不兼容的问题,比如银河系和太阳系之间的模型不能相互调用,影响了系统的运行速度和整体性能,因此需要对整个系统中所有三维模型制定统一的管理规范,优化系统的功能和性能。对三维模型的规范化管理,可以有效地提高目标三维模型的调用速度和精确度,将模型文件规范化,可以减小内存占用率,缩短模型调用时间,保证三维模型使用的实时性,促进航天事业的发展。
近年来,由于3D技术的快速发展,市场应用越来越广泛,对于三维模型的研究也越来越多[5-8]。三维模型的格式各种各样,3DS是一种比较通用的模型格式[9-10],可以导入到不同的建模软件,不管是建模人员还是后期使用人员,都能灵活操作。3DS文件由许多块组成,每个块代表特定的信息,包括块ID、块长度和块数据。3DS文件格式并不是一些基本的块堆积而成的,而是一个复杂而有序的整体,大块包含小块的层级结构。事实上一个3DS文件有上千个块(chunk),它们构成了一个复杂灵活的文件系统,不需要知道所有块就可以顺利地读完整个文件,只对所需的目标特征做信息提取即可。研究主要是针对一个模型文件,提取文件中十二个目标信息,作为信息分类点对三维模型进行分类编码,因此,选择3DS格式的文件作为研究对象。
在对3DS文件进行分类编码时,需要提取文件的特征作为分类点,对于每一个分类点,具体信息可以通过将模型导入3dsMax[11]查看,但是这大大增加了工作量,操作不方便,也不科学。针对这个问题,设计并提出了一个自动提取文件特征信息的提取器,能够更科学地提取文件信息。
1 3DS文件分析
对于一个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 3DS特征提取器设计
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格式文件、模型有无材质、模型有无纹理、材质贴图格式、有无关键帧、模型顶点数、模型的面数、模型对象数、材质数、材质名称。
3 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文件导出
4 结束语
一个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