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

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