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