3ds文件結構(三)

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),接下來的一個浮點數表示了攝像機的旋轉角(譯者:不知道什麼用……),最後一個浮點數表示了攝像機的鏡頭角度(譯者:就是視角)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章