Самоучитель по 3dsmax 7

         

Формат 3DS-файла


РАЗНОЕ
7.5. Формат 3DS-файла

Основная идея вот: файл 3DS состоит из блоков (chunks), каждый из которых содержит какие-то полезные данные и, возможно, подблоки. Большинство блоков содержит либо данные, либо подблоки, хотя есть и смешанные блоки. Общий формат каждого блока такой:

смещениедлинаданные
02идентификатор типа блока, chunk_id
24длина блока, chunk_len
4chunk_lenданные или подблоки (в зависимости от chunk_id)

В качестве относительно полного описания конкретного содержимого блоков я бы порекомендовал следующие вещи:

  • исходники 3DS reader от MRI/Doomsday, читаются они просто великолепно. Скачать можно на
    ftp://ftp.cdrom.com/pub/demos/code/3ds/3dsrdr13.zip;

  • 3dsinfo.txt от digisnap.

Здесь я приведу лишь частичное описание, достаточное, впрочем, для того, чтобы прочитать из 3DS-файла 3D сцену и информацию о ее (сцены) анимации.

Итак, список идентификаторов типов нужных нам для этого блоков: CHUNK_MAIN = 0x4D4D; // [-] сцена CHUNK_OBJMESH = 0x3D3D; // [-] всяческие объекты CHUNK_OBJBLOCK = 0x4000; // [+] объект CHUNK_TRIMESH = 0x4100; // [-] trimesh-объект CHUNK_VERTLIST = 0x4110; // [+] список вершин CHUNK_FACELIST = 0x4120; // [+] список граней CHUNK_FACEMAT = 0x4130; // [+] материалы граней CHUNK_MAPLIST = 0x4140; // [+] текстурные координаты CHUNK_TRMATRIX = 0x4160; // [+] матрица перевода CHUNK_CAMERA = 0x4700; // [+] объект-камера CHUNK_MATERIAL = 0xAFFF; // [-] материал CHUNK_MATNAME = 0xA000; // [+] название материала CHUNK_TEXTURE = 0xA200; // [-] текстура материала CHUNK_MAPFILE = 0xA300; // [+] имя файла текстуры HUNK_KEYFRAMER = 0xB000; // [-] информация об анимации CHUNK_TRACKINFO = 0xB002; // [-] поведение объекта CHUNK_TRACKOBJNAME = 0xB010; // [+] название этого объекта CHUNK_TRACKPIVOT = 0xB013; // [+] центр вращения объекта CHUNK_TRACKPOS = 0xB020; // [+] траектория объекта CHUNK_TRACKROTATE = 0xB021; // [+] траектория вращения // объекта CHUNK_TRACKCAMERA = 0xB003; // [-] поведение камеры CHUNK_TRACKFOV = 0xB023; // [+] поведение FOV камеры CHUNK_TRACKROLL = 0xB024; // [+] поведение roll камеры CHUNK_TRACKCAMTGT = 0xB004; // [-] поведение "цели" камеры

Конкретные данные содержат лишь блоки, отмеченные плюсом, остальные блоки состоят лишь из подблоков и их нам надо различать лишь потому, что нужные нам блоки данных - подблоки этих остальных.



Содержание раздела