3ds文件結構(一)

   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

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