Document Revision 0.91 - June 1996
Rewritten by Martin van Velsen (email: [email protected] ) and Robin Fercoq ( 3ds-bin + mli )(email: [email protected]) Based on Original document by Jim Pitts ( email: jp5.ukc.ac.uk ) A lot of the chunks are still undocumented if you know what they do please email me Martin van Velsen,Robin Feroq or Jimm Pitts. As I get more information of the file format,I will document it for everyone to see. I will post this regurlarly to alt.3d and alt.3d-studio and I can be contacted there if my email does not work. Disclaimer. This document describes the file format of the 3ds files generated by 3d-studio by Autodesk. By using the information contained within you agree not to hold me Jim Pitts or Robin Feroq liable if, from its use, you f^Hmuck something up. OK? A warning beforehand. This docs describes the format of 3ds files produced by version 3.0 and higher of 3d-studio. You can find this information at byte 29 in the binary file. This document can be found on the regular newsgroups: alt.3d and alt.3d-studio It can also be found at: "http://www.ptf.hro.nl/odi/free-d/docs/io/3ds/3ds_bin.doc" Or "http://www.mediatel.lu" The 3ds file format is made up of chunks. They describe what information is to follow and what it is made up of, it's ID and the location of the next block. IF you don't understand a chunk you can quite simply skip it. The next chunk pointer is relative to the start of the current chunk and in bytes. The binary information in the 3ds file is written in a special kind of way. Namely the lest significant byte comes first in an int. For example: 4A 5C (2 bytes in hex) would be 5C high byte and 4A low byte. In a long it is: 4A 5C 3B 8F where 5C4A is the low word and 8F 3B is the high word. And now for the chunks. A chunk is defined as: start end size name 0 1 2 Chunk ID 2 5 4 Pointer to next chunk relative to the place where Chunk ID is, in other words the length of the chunk Chunks have a hierarchy imposed on them that is identified byt it's ID. A 3ds file has the Primary chunk ID 4D4Dh. This is always the first chunk of the file. Within the primary chunk are the main chunks. to give you a preview and a reference to the hierarchy of chunks, below is a diagram to show the diffrent chunk ID's and their place in the file. The chunks are given a name because below the diagram is a list which defines the names to the actual chunk id's. This makes it easier to put it in some source code ( how convenient that some sample code is included ) 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)