三维建模软件3ds Max数据文件3ds的解析

2012-01-12 06:43:32刘爽张恒博
大连民族大学学报 2012年3期
关键词:字节材质解析

刘爽,张恒博

(大连民族学院计算机科学与工程学院,辽宁大连 116605)

三维建模软件3ds Max数据文件3ds的解析

刘爽,张恒博

(大连民族学院计算机科学与工程学院,辽宁大连 116605)

为了实现三维建模数据的快速读取和解析,提出了一种解析保存3ds数据的方法并应用到实际三维漫游软件中。作为专业的三维建模软件,3ds Max提供了强大的快速建模功能。但由于需要占用大量CPU和内存资源,因此其实时交互性较差,很难直接应用到实际工程项目中。充分利用3ds Max的快速建模能力,分析3ds Max的建模文件3ds数据格式,以其内部树状数据结构为基础,按照其存储特点及数据之间的关系有效读取,并采用C++高效编码实现,以自定义的列表类、对象类、材质库类合理的组织和保存,为三维场景重建奠定基础。实际应用表明该解析算法实用有效。

3ds Max;三维建模;3ds数据文件;实时交互;解析

随着虚拟现实技术的发展,航空航天、医学实习、军事训练、建筑设计、教育培训等众多领域对基于三维建模的三维可视化技术需求越来越大[1-3]。这里的三维建模技术是指获取实际环境的三维数据,并根据应用的需要,利用获取的三维数据建立相应的虚拟环境模型。目前,常用的三维建模软件包括AutoCAD、3ds Max、Rhino、Alias、Solidthink、3D VIZ等等。尽管不同的三维建模软件适用于不同的应用领域,但3ds Max还是以适用范围广、功能强大而成为PC机上全球使用人数最多的三维设计软件之一。3ds Max全称3D Studio Max,是Autodesk多媒体分公司——Discreet公司开发的三维建模、渲染、动画制作软件,其专业性较强,功能可以与工作站级的软件相媲美,广泛应用于电影特效制作、影视动画设计(广告、片头)、建筑装潢、游戏制作(交互式和电影式)、三维概念化设计等各个领域。

但是大规模三维场景的三维模型往往比较复杂,3ds Max软件在普通的个人PC机上运行这些复杂三维模型时需要占用大量的CPU和内存资源,因此交互性和实时性较差。本文将主要讨论其建模数据3ds文件的特点、组织方式,快速解析并合理保存,充分利用该建模软件快速强大的建模功能的同时借助于OpenGL保证三维可视化的实时交互性。

13 ds数据格式文件分析

3ds Max软件的建模数据保存为以“.DS”为扩展名的3ds数据文件格式。出于保护版权等原因,文件3ds对外格式是不公开的,Autodesk公司对3ds文件不提供任何支持。但是可以通过已知的数据结构及相关研究资料完成3ds文件的解析。3ds文件中保存有三维建模所需的点、线、面、材质等属性特征,通过读取其二进制格式数据,可以编程实现获取点、线、面、材质等数据,进而实现三维场景重建。

1.13 ds数据文件格式

解析3ds文件的关键是理清文件的内部数据结构。3ds文件内部是以“块”为单位组织的。这里,“块”是指相同类型数据信息的集合。所有块信息的数据格式见表1。

表1 块数据格式

由表1可知,这些块数据说明了紧跟其ID之后的内容和下一个块的地址。下一个块的指针与当前块的首地址和长度有关。所有的块都是以一个块头为起始的,后面跟着块数据和子块。块头是表1中的前两行,包括两个字节保存的块ID和四个字节保存的块的长度信息。根据不同块的ID值就可以获取该块的数据信息。

3ds文件以二进制形式存储,以二进制打开任何一个3DS文件,可以发现其内容都是以4D4D开头,如图1,该图为太阳鸟的三维建模数据文件。可以通过判断文件起始的两个字节是否为0x4D4D来判断文件是否为3ds格式。

图1 3ds文件的十六进制数据查看

与许多文件格式一样,3ds二进制文件中的数据也是按低位在前、高位在后的方式组织的,例如,两个十六进制字节4A 5C组成的整型数,则5C是高位字节,4A是低位字节;对于长整型数,如:4A 5C 3B 8F,则5C4A是低位字,而8F3B是高位字,解析数据时需遵循这一规则。

3ds文件中所有的块以树形结构组织在一起,就是说大块中包含小块,最顶层的块为主块(Main Chunk),其块ID为0x4D4D。三维场景重建所需的块均是主块的一级或多级子块,每个块所包含的信息不同,所以每块内部的数据结构也并不相同。

1.23 ds树状结构

为了直观的说明3ds文件数据之间的关系,本文选择三维重建主要的块:主编辑块(3D Editor Chunk)、对象块(Object Block)、材质块(Material Block)、关键帧块(Keyframer Chunk)来说明块之间的父子关系,如图2,不同层次的树状结构就体现了不同的父子关系。这里由于篇幅关系图2并未列出所有的块数据,为避免个别节点的子节点过多,某些子块信息已省略。

其中,MAIN3DS(0x4D4D)为3ds文件中的主块,包含所有其它的块,所有子块中最重要的就是主编辑块EDIT3DS。

EDIT3DS(0x3D3D)块,包含对象块EDIT_ OBJECT,也就是三维场景中的对象。

EDIT_OBJECT(0x4000)块,包含OBJ_TRIMESH块。块头之后紧跟着一个以NULL结尾的字符串对象名。

OBJ_TRIMESH(0x4100)块,包含对象的几何信息:顶点、面、纹理坐标。

TRI_VERTEXL(0x4110)块,包含顶点列表,格式为两字节无符号整型顶点总数,之后是顶点数目个三元组,每个三元组为一个点的XYZ坐标。这里需要注意的是,OpenGL的空间坐标系是右手坐标系,而3DS文件的坐标系是左手坐标系,因此在读取时要对其进行适当的转化,将读取的坐标值的Y坐标与Z坐标对调,并将对调之后的Z坐标翻转。

TRI_FACEL1(0x4120)块,定义面信息,每个面都是由三个点构成的。格式与点块类似,前两个字节是无符号整型数字,代表面的总数,接下来是4个两字节的无符号整型,前三个是点在点块中的索引号,最后一个是标志位。可以根据面块中每个面对应三个点在点块中的索引,搜索到点的三维坐标。

TRI_TEXCOORD(0x4140)块,提供纹理坐标,起始的两个字节无符号整型表示列表中的条目总数,之后是两浮点数的序列对,定义相应顶点的二维纹理坐标。

图2 3ds文件树形结构图

23 ds数据格式文件解析

2.13 ds数据解析

假设从3ds文件中截取22个字节的数据:

读取文件头,判断ID是否为0x4D4D,若ID不是0x4D4D则直接跳出,否则继续。

接着就是按照树状块的结构通过while循环,从树干、树杈、树枝依次读取,也就是按照文件指针的顺序依次读取,如果读取到的块信息是三维建模需要的,那么进一步解析。如果读取的块信息未知,那么直接跳过。注意读取过程不能按特定的块ID去查找块信息,因为并不是所有的块都存在,比如材质块,如果在建模时未指定对象材质,那么导出的3ds文件中就不包含材质块。主程序流程如图3。

其中,Read3DSChunk()函数用于将块的内容读入块结构中,对每个块调用的Read3DSFile()函数用来获取对象信息、材质信息、关键帧信息等。Read3DSFile()函数中调用ReadMDATA()函数读取最高级的对象数据;ReadKFDATA()函数读取关键帧数据。

图3 解析3ds文件的主流程

这里对主编辑块的解析流程简要加以说明。根据块头的ID号判断读取的是材质块还是对象块。当读取到材质块时,则将读取到的信息保存到材质结构体tMaterial中,每读完一个材质块,就将其添加到材质对象MaterialDict中,最终组成材质库。当读取到的是对象块时,调用ReadNamed-Object()函数来读入对应名称的对象块,其它名称的块将忽略,该函数只对块ID为0x4100的对象块进行处理,其余的块直接跳过。

对象由点、面、材质三部分构成。因此,读取对象块时可以根据块的ID值做不同的处理。

如果块ID值为0x4110,则当前块为点块。把点数据读入的同时写入对象类。

如果块ID为0x4120,则当前块为面块。读取面块时首先获取总面数,通过fread(&value,sizeof (value),1,fp)将面数读取到value变量中,接着根据面数循环读取每个面对应三个点的索引,循环结束后将索引加入到object对象中,然后读取该面块包含的面对应的材质名称并根据名称到材质库中查找,接下来读入该材质映射的面的数量,最后将查找得到的材质加入到object对象中并与对应的面进行关联。

如果块ID值为0x4140,则当前块为纹理坐标块。UV纹理坐标是二维坐标,其作用是实现三维场景中逼真的三维环境,即把现实世界中的图片嵌合在三维物体上。3ds中提供的方法是应用纹理坐标之前首先由点块中对应的三个点确定一个平面,然后再由三个纹理坐标确定该面所需的贴图。每个UV纹理坐标由两个浮点数构成,与之前读取的点块中每个点依次对应,所以纹理坐标的数量与点块中点数完全相同。

2.2 解析数据的保存

在OpenGL[4]中实现三维重建时,面是由点构成的,对象是由面构成的,对象上的颜色、贴图等数据则是由材质库根据对象不同的面选择不同的材质块进行映射。因此,在2.1节读取3ds文件的过程中必须保存相应数据。本文3ds文件数据的保存是通过三个类完成的,分别为对象类、列表类、材质库类。其中对象类用于保存一个对象的所有信息,包括坐标点、纹理坐标点、对象本身所用的材质,面的信息等等。列表类的作用是可以索引所有的对象,即可以通过列表类获取所有已知的信息。材质库类用于保存读取的材质块,其中包括材质的镜面光成分、散射光成分、对应的纹理贴图名等。

由上节的读取解析过程可知,一个3ds文件解析之后保存成了一个列表类、一个材质库类,一个列表类对应一个或多个对象类。其中材质库类包含所有的材质信息,而一个对象类包含了该对象所有三维重建所需要的数据信息及对应材质库的索引。在OpenGL中实现三维重建时只需要通过列表类就可找到所有需要的数据信息。

3 实际应用

OpenGL作为专业的3D程序接口,定义了一个跨编程语言、跨平台的编程接口,可以方便的进行3D物体交互性应用程序的开发。本文在MFC框架下,利用OpenGL三维建模功能函数及交互绘制函数实现了大连民族学院校园三维漫游系统软件的开发。由于本文的侧重点在于3ds数据文件格式的有效解析和保存,因此对基于MFC框架和OpenGL类库实现的三维重建就不再详细陈述,相关信息可以查阅参考文献[5]。3ds Max软件与本漫游软件运行相同场景时的每帧刷新结果见表2,这里pc机配置CPU为Intel Pentium Dual E2180 2.00GHz主频,1G内存,120G硬盘的普通电脑,不同的场景为把整个校园建模数据分割为不同的组成部分。由对比数据可以看出本漫游软件在三维场景漫游过程中画面更流畅。

表2 3ds Max与漫游软件运行效果对比

4 结语

在OpenGL+MFC框架下,以解析的3ds数据为基础实现的三维重建,完成了大连民族学院三维漫游系统,该软件可以在普通个人用户的PC机上流畅运行。这种实现方案不仅有效利用了3ds Max软件的快速建模功能,在保证良好三维重建效果的同时,借助OpenGL的交互绘制编程接口提供了强大的实时交互功能。

[1]HUANG Y L,ZHANG X,3D reconstruction based on OpenGL and treatment of smoothness[C].In Proceedings of 2011 IEEE 3rd International Conference on Communication Software and Networks(ICCSN 2011),Xi'an,China,2011:78-81.

[2]OZKAN N F,GREENSTEIN J S.Effects of 2D online and 3D virtual world meeting spaces on the performance of a concept selection task by engineering design teams[C].In Proceedings of the Human Factors and Ergonomics Society 55th Annual Meeting,HFES 2011,2011:1676-1680.

[3]郭立萍,李光霞,董硕.虚拟现实技术在构建虚拟旅游环境中的应用[J].安徽农业科学,2010,38(18): 9811-9813.

[4]HEARN D,PAULINE M B.Computer Graphics with OpenGL[M].北京:电子工业出版社,2005.

[5]李国超,刘爽,张延超,等.VC环境下基于OpenGL与3DS的三维场景重建[J].电脑知识与技术,2010,26 (10):10131-10133.

Parsing of 3ds Data File Provided by Three Dimensional Modelling Software 3ds Max

LIU Shuang,ZHANG Heng-bo
(School of Computer Science&Engineering,Dalian Nationalities University,Dalian Liaoning 116605,China)

To read and parse three dimensional modelling data rapidly,an approach of parsing and saving 3ds data is proposed and applied in a practical 3D walkthrough software.As a professional three dimensional modelling software,3ds Max provides powerful and rapid functions of modelling.But due to massive occupation of resources of CPU and memory,real-time interaction of this software is poor and practical application of engineering projects is difficult.Making full use of the advantages of rapid modelling functions of 3ds Max software,we analyzed modelling file with 3ds data format provided by 3ds Max based on its inner tree-structured data structure.C+ +programming language is adopted to implement effective reading according to its saving characteristics and relationship between data.Then self-defined list class,object class and material library class are introduced to organize and save the parsed data for three dimensional reconstruction.Practical application shows the effectiveness of the proposed parsing algorithm.

3ds Max;three dimensional modeling;3ds data file;real-time interaction;parsing

TP391

A

1009-315X(2012)03-0260-05

2012-2-23;最后

2012-3-1

中央高校基本科研业务费专项资金资助项目(DC110306)。

刘爽(1977-),女,满族,辽宁锦州人,副教授,博士,主要从事智能信息处理、计算机教育研究。

(责任编辑 刘敏)

猜你喜欢
字节材质解析
No.8 字节跳动将推出独立出口电商APP
三角函数解析式中ω的几种求法
No.10 “字节跳动手机”要来了?
衣服材质大揭秘
睡梦解析仪
简谈MC7字节码
电竞初解析
商周刊(2017年12期)2017-06-22 12:02:01
相机解析
外套之材质对比战
Coco薇(2015年10期)2015-10-19 12:17:50
针织衫之材质对比战
Coco薇(2015年10期)2015-10-19 12:17:14