3ds文件结构(三)

来源:互联网 发布:lab series知乎 编辑:程序博客网 时间:2024/05/18 09:22

3.3D编辑块

 

到现在为止已经大概都介绍完了,现在开始研究细节信息。

0x4D4D是文件头,他的大小就是整个文件的大小。

 

另外还有两个主要块,他们是3D编辑块和关键帧块:

0x3D3D3D编辑块,描述了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个视口,编辑程序配置中包含57020块和57011块。但是事实上只有开始的47020块对用户的视口外观有影响,其他的里面只包含一些附加信息。该块的第67字节表明了视图的类型,合法的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坐标

其中XYZ一直重复顶点数目次,这样就得到了所有的顶点。

 

4111顶点选项块:

该块由一些整数组成,第一个整数表明了顶点的个数,然后对每个顶点用一个整数表示一些位信息。其中0~711~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字节

面信息

其中顶点ABC和面信息重复面数量次就得到了所有的面。面信息的各位意义如下:

位数

意义

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.50.5)。

 

4150面平滑组块(译者:至今本人不知道这个块的用处……):

面的数量乘上4个字节,即每个数据是一个4字节的整数,第N个数字表示该面是否属于第N个平滑组。

 

4160平移矩阵块:

开始的3个浮点数定义了物体局部坐标在绝对坐标中的位置,最后3个浮点数定义了物体的局部中心。

 

4170标准映射块(译者:至今本人不知道这个块的用处……):

开始的2个字节表示了映射类型:0表示平面映射或者是指定映射;1:圆柱映射;2:球映射。接着用21个浮点数描述该映射。

 

4600光源块:

开始用3个浮点数(共12字节)描述了该光源的XYZ坐标位置,接下来是如下数据块:

ID          描述

       0010       RGB色

       0011     24位色块

       4610     该光源是个聚光灯

       4620     布尔值,表示该光源的有效性

 

其中,4610块的数据:

开始的3个浮点数表示了聚光灯指向的方向(XYZ)。接下来的一个浮点数表示了热点。最后一个浮点数表示了发散(译者:好像就是聚光的角度)。

 

0010 RGB色块:

3个浮点数表示了物体的RGB色。

 

0011 24位色块:

3个字节描述了物体的RGB色(译者:即每分色一字节)。

 

4700摄像机块:

开始的3个浮点数表示了摄像机的位置(XYZ),中间的3个浮点数表示了摄像机指向的位置(XYZ),接下来的一个浮点数表示了摄像机的旋转角(译者:不知道什么用……),最后一个浮点数表示了摄像机的镜头角度(译者:就是视角)。

 

原创粉丝点击