3DS文件结构

2019-08-31 09:11

3DS文件结构(.3ds)

文档版本:0.93 – 1997.1

作者:Martin van Velsen(重写) Robin Fercoq(重写) Jim Pitts(原版)

Albert Szilvasy(原代码) 翻译:樱

还有许多“块”我并没有写入本文档中,这是因为我并不知道他们有什么用,如果你知道的话请来信告诉我。当我获得更多关于3ds文件结构的信息的时候,我将重写这篇文档。

这篇文档描述了由AutoDesk公司的3ds max产生的3ds文件的结构,因此你将无法从AutoDesk公司以及其他任何与AutoDesk公司有关系的公司获得有关二进制的.3ds和.mli文件的性质和内容的任何支持。

警告:本文档描述了版本号为3.0或更高版本的.3ds文件,你可以获得.3ds的版本信息,这些信息在二进制的.3ds文件中第29字节处(译者:似乎不在,版本号在块ID为:0x0002的块里)。

现在就要开始我们的内容了,我将按照如下的方式组织内容:

1.介绍。

2.所有的“块” 3.3D编辑块 4.关键帧块 5.代码

1.介绍

3ds文件结构是由“块”组成的。它们描述了接在它们后面的数据的信息,即这些数据是如何组成的。“块”是由两部分组成的:1.ID;2.下一个数据块的位置。也就是说,如果你不明白这个块的用处,你可以迅速地跳过它。因为下一个数据区的相对位置(字节数)已经得到了。二进制的3ds文件是用一种特殊的方法写成的:也就是低字节在前,高字节在后(译者:二进制文件都是这样的)。举例来说,4A 5C(十六进制,2个字节)实际上是数字:5C 4A,4A 是低字节,5C是高字节。对于4字节整数:4A 5C 3B 8F实际上是8F 3B 5C 4A,3B 8F是高字节,4A 5C是低字节。那么现在解释一下“块”,“块”被定义成如下的样子:

unsigned short ID;//2个字节,无符号的,块的ID

unsigned long Length;//4个字节,无符号的,描述了下一个数据区对于当前数据区的位置,实际上就是本数据区的大小。

每个块是一个层次结构,由ID表示。3ds文件有一个主块,ID是0x4D4D。这个块永远是3ds文件的开始(译者:可以用它来鉴定本文件是否为一个3ds文件)。在开始块里面就是主要块了。为了使大家清晰地查看,研究这个层次结构,下面给出一个图表,用来显示他们的不同ID以及他们在文件中的位置。这些ID都被命名,这是因为在图表后面以这些

名字对应着他们的ID定义了一个列表。将他们写入原代码会变的更简单(本文档包含着这些便利的样例代码)。

MAIN3DS (0x4D4D)

|

+--EDIT3DS (0x3D3D) | |

| +--EDIT_MATERIAL (0xAFFF) | | |

| | +--MAT_NAME01 (0xA000) (See mli Doc) | |

| +--EDIT_CONFIG1 (0x0100) | +--EDIT_CONFIG2 (0x3E3D) | +--EDIT_VIEW_P1 (0x7012) | | |

| | +--TOP (0x0001) | | +--BOTTOM (0x0002) | | +--LEFT (0x0003) | | +--RIGHT (0x0004) | | +--FRONT (0x0005) | | +--BACK (0x0006) | | +--USER (0x0007) | | +--CAMERA (0xFFFF) | | +--LIGHT (0x0009) | | +--DISABLED (0x0010) | | +--BOGUS (0x0011) | |

| +--EDIT_VIEW_P2 (0x7011) | | |

| | +--TOP (0x0001) | | +--BOTTOM (0x0002) | | +--LEFT (0x0003) | | +--RIGHT (0x0004) | | +--FRONT (0x0005) | | +--BACK (0x0006) | | +--USER (0x0007) | | +--CAMERA (0xFFFF) | | +--LIGHT (0x0009) | | +--DISABLED (0x0010) | | +--BOGUS (0x0011) | |

| +--EDIT_VIEW_P3 (0x7020) | +--EDIT_VIEW1 (0x7001) | +--EDIT_BACKGR (0x1200)

| +--EDIT_AMBIENT (0x2100) | +--EDIT_OBJECT (0x4000) | | |

| | +--OBJ_TRIMESH (0x4100) | | | |

| | | +--TRI_VERTEXL (0x4110) | | | +--TRI_VERTEXOPTIONS (0x4111) | | | +--TRI_MAPPINGCOORS (0x4140) | | | +--TRI_MAPPINGSTANDARD (0x4170) | | | +--TRI_FACEL1 (0x4120) | | | | |

| | | | +--TRI_SMOOTH (0x4150) | | | | +--TRI_MATERIAL (0x4130) | | | |

| | | +--TRI_LOCAL (0x4160) | | | +--TRI_VISIBLE (0x4165) | | |

| | +--OBJ_LIGHT (0x4600) | | | |

| | | +--LIT_OFF (0x4620) | | | +--LIT_SPOT (0x4610) | | | +--LIT_UNKNWN01 (0x465A) | | |

| | +--OBJ_CAMERA (0x4700) | | | |

| | | +--CAM_UNKNWN01 (0x4710) | | | +--CAM_UNKNWN02 (0x4720) | | |

| | +--OBJ_UNKNWN01 (0x4710) | | +--OBJ_UNKNWN02 (0x4720) | |

| +--EDIT_UNKNW01 (0x1100) | +--EDIT_UNKNW02 (0x1201) | +--EDIT_UNKNW03 (0x1300) | +--EDIT_UNKNW04 (0x1400) | +--EDIT_UNKNW05 (0x1420) | +--EDIT_UNKNW06 (0x1450) | +--EDIT_UNKNW07 (0x1500) | +--EDIT_UNKNW08 (0x2200) | +--EDIT_UNKNW09 (0x2201) | +--EDIT_UNKNW10 (0x2210) | +--EDIT_UNKNW11 (0x2300) | +--EDIT_UNKNW12 (0x2302) | +--EDIT_UNKNW13 (0x2000)

| +--EDIT_UNKNW14 (0xAFFF) |

+--KEYF3DS (0xB000) |

+--KEYF_UNKNWN01 (0xB00A)

+--............. (0x7001) ( viewport, same as editor ) +--KEYF_FRAMES (0xB008) +--KEYF_UNKNWN02 (0xB009) +--KEYF_OBJDES (0xB002) |

+--KEYF_OBJHIERARCH (0xB010) +--KEYF_OBJDUMMYNAME (0xB011) +--KEYF_OBJUNKNWN01 (0xB013) +--KEYF_OBJUNKNWN02 (0xB014) +--KEYF_OBJUNKNWN03 (0xB015) +--KEYF_OBJPIVOT (0xB020) +--KEYF_OBJUNKNWN04 (0xB021) +--KEYF_OBJUNKNWN05 (0xB022)

颜色块是一种在整个文件中都能找到的块。其名字为: 1. COL_RGB 2. COL_TRU 3. COL_UNK

2.所有的块

现在你会看到我将使用define来定义这些数字。然而因为这里有一些新的块,这些块并没有记录到最初的文档中,因此各位要留心。

//------ 初始块

#define MAIN3DS 0x4D4D

//------ 主块

#define EDIT3DS 0x3D3D // this is the start of the editor config #define KEYF3DS 0xB000 // this is the start of the keyframer config

//------ 3DS编辑块的子块

#define EDIT_MATERIAL 0xAFFF #define EDIT_CONFIG1 0x0100 #define EDIT_CONFIG2 0x3E3D #define EDIT_VIEW_P1 0x7012

#define EDIT_VIEW_P2 0x7011 #define EDIT_VIEW_P3 0x7020 #define EDIT_VIEW1 0x7001 #define EDIT_BACKGR 0x1200 #define EDIT_AMBIENT 0x2100 #define EDIT_OBJECT 0x4000

#define EDIT_UNKNW01 0x1100 #define EDIT_UNKNW02 0x1201 #define EDIT_UNKNW03 0x1300 #define EDIT_UNKNW04 0x1400 #define EDIT_UNKNW05 0x1420 #define EDIT_UNKNW06 0x1450 #define EDIT_UNKNW07 0x1500 #define EDIT_UNKNW08 0x2200 #define EDIT_UNKNW09 0x2201 #define EDIT_UNKNW10 0x2210 #define EDIT_UNKNW11 0x2300 #define EDIT_UNKNW12 0x2302 #define EDIT_UNKNW13 0x3000 #define EDIT_UNKNW14 0xAFFF

//------ 对象块的子块

#define OBJ_TRIMESH 0x4100 #define OBJ_LIGHT 0x4600 #define OBJ_CAMERA 0x4700

#define OBJ_UNKNWN01 0x4010

#define OBJ_UNKNWN02 0x4012 //---- 阴影块

//------ 摄象机块的子块

#define CAM_UNKNWN01 0x4710 #define CAM_UNKNWN02 0x4720

//------ 光源块的子块

#define LIT_OFF 0x4620 #define LIT_SPOT 0x4610 #define LIT_UNKNWN01 0x465A

//------ 三角形列表块的子块

#define TRI_VERTEXL 0x4110 #define TRI_FACEL2 0x4111 #define TRI_FACEL1 0x4120 #define TRI_SMOOTH 0x4150


3DS文件结构.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第五章 脂类代谢(试题与答案)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: