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