3.3D编辑块
到现在为止已经大概都介绍完了,现在开始研究细节信息。
0x4D4D是文件头,他的大小就是整个文件的大小。
另外还有两个主要块,他们是3D编辑块和关键帧块:
0x3D3D:3D编辑块,描述了3D对象的数据。3D对象就在这个地方。
0xB000:关键帧块,描述了关键帧数据。
在某个主要块之后有一些数据块。这些应该是其他一些允许在主要块之内的数据(请参见图表)。
0x3D3D的子块:
ID 描述
0100 配置部分
1100 unknown
1200 背景色
1201 unknown
1300 unknown
1400 unknown
1420 unknown
1450 unknown
1500 unknown
2100 环境色
2200 雾?
2201 雾 ?
2210 雾 ?
2300 unknown
3000 unknown
3D3E 配置编辑块
4000 对象数据块
AFFF 材质列表
子块AFFF,定义了材质。其子块A000定义了材质名称。材质名称是ASCLL字符,以0x00为结束符。
子块3D3E,配置编辑块:
ID 描述
7001 视口指示器
7011 视口定义 ( 类型 2 )
7012 视口定义( 类型 1 )
7020 视口定义( 类型 3 )
3D3E块中有很多变态的数据,其中只有7020块比较重要,这个块定义了4个活动的视口。假设在编辑程序中使用了4个视口,编辑程序配置中包含5个7020块和5个7011块。但是事实上只有开始的4个7020块对用户的视口外观有影响,其他的里面只包含一些附加信息。该块的第6,7字节表明了视图的类型,合法的ID以及其对应的视图如下所示:
ID 描述
0001 顶
0002 底
0003 左
0004 右
0005 前
0006 后
0007 用户
FFFF 摄象机
0009 光源
0010 无效
子块4000是一个对象描述块。该块的开始是一个由0结尾的字符串,描述了该对象的名称。要记住,对象不仅仅是一个物体,也可能是一个光源或者是一个摄象机:
ID 描述
4010 unknown
4012 阴影?
4100 三角形列表
4600 光源
4700 摄象机
子块4100三角形列表的子块:
ID 描述
4110 顶点列表
4111 顶点选项
4120 面列表
4130 面材质
4140 纹理映射
4150 面平滑组
4160 平移矩阵
4165 物体可见性
4170 标准映射
其中4110顶点列表块的数据:
数据类型 | 大小 | 名称 |
Unsigned short | 2字节 | 顶点数目 |
Float | 4字节 | X坐标 |
Float | 4字节 | Y坐标 |
float | 4字节 | Z坐标 |
其中X,Y,Z一直重复顶点数目次,这样就得到了所有的顶点。
4111顶点选项块:
该块由一些整数组成,第一个整数表明了顶点的个数,然后对每个顶点用一个整数表示一些位信息。其中0~7,11~12位影响物体的可见性,8~10位是随机信息,13~15位表明该顶点是否在某个选择集中被选中。该块不很重要。即使丢失此块,3DS仍旧能够将文件正确的载入。
4120面列表块:
数据类型 | 大小 | 名称 |
Unsigned short | 2字节 | 面数量 |
Unsigned short | 2字节 | 顶点A的索引 |
Unsigned short | 2字节 | 顶点B的索引 |
Unsigned short | 2字节 | 顶点C的索引 |
Unsigned short | 2字节 | 面信息 |
其中顶点A,B,C和面信息重复面数量次就得到了所有的面。面信息的各位意义如下:
位数 | 意义 |
1 | AC边的可见性。若是可见的话为1。 |
2 | BC边的可见性。若是可见的话为1。 |
3 | AB边的可见性。若是可见的话为1。 |
4 | 映射 |
5 | 未使用 |
6 | 同上 |
7 | 同上 |
8 | 同上 |
9 | 同上 |
10 | 混乱 |
11 | 混乱 |
12 | 0 |
13 | 0 |
14 | 是否在选择集3被选中 |
15 | 是否在选择集2被选中 |
16 | 是否在选择集1被选中 |
4130面材质块:
如果一个对象只使用默认材质的话便没有面材质块。事实上,每一个对象使用的材质都有一个面材质块。每一个面材质块都以一个以0结尾的字符串开始,接着由一个数字表示使用该材质的面的数量(2个字节),接着就是面描述。0000表示面列表中的第一个面。
4140纹理映射块:
开始的两个字节表示了顶点的数量,然后为每个顶点定义2个浮点数的纹理坐标。也就是说,如果一个顶点的纹理映射在纹理的中心,那么其坐标就是(0.5,0.5)。
4150面平滑组块(译者:至今本人不知道这个块的用处……):
面的数量乘上4个字节,即每个数据是一个4字节的整数,第N个数字表示该面是否属于第N个平滑组。
4160平移矩阵块:
开始的3个浮点数定义了物体局部坐标在绝对坐标中的位置,最后3个浮点数定义了物体的局部中心。
4170标准映射块(译者:至今本人不知道这个块的用处……):
开始的2个字节表示了映射类型:0表示平面映射或者是指定映射;1:圆柱映射;2:球映射。接着用21个浮点数描述该映射。
4600光源块:
开始用3个浮点数(共12字节)描述了该光源的X,Y,Z坐标位置,接下来是如下数据块:
ID 描述
0010 RGB色
0011 24位色块
4610 该光源是个聚光灯
4620 布尔值,表示该光源的有效性
其中,4610块的数据:
开始的3个浮点数表示了聚光灯指向的方向(X,Y,Z)。接下来的一个浮点数表示了热点。最后一个浮点数表示了发散(译者:好像就是聚光的角度)。
0010 RGB色块:
用3个浮点数表示了物体的R,G,B色。
0011 24位色块:
用3个字节描述了物体的R,G,B色(译者:即每分色一字节)。
4700摄像机块:
开始的3个浮点数表示了摄像机的位置(X,Y,Z),中间的3个浮点数表示了摄像机指向的位置(X,Y,Z),接下来的一个浮点数表示了摄像机的旋转角(译者:不知道什么用……),最后一个浮点数表示了摄像机的镜头角度(译者:就是视角)。