У объекта chunk нелинейная структура, это значит что элементы, находящиеся по структуре внутри других, читаются только после того, как будут прочитаны (будет получен к ним доступ) элементы их содержащие. Структура имеет вид дерева, такую структуру можно наблюдать на локальных дисках компьютера. Конечно же, необязательно читать все объекты, достаточно прочитать только самые важные.
Каждый chunk состоит из 4 записей:
Identifier – это число, записанное в шестнадцатеричном формате, размером 2 байта, идентифицирующее chunk. С этой информацией можно немедленно узнать, нужен ли он. Если нам нужен chunk, мы открываем собранную в нем информацию в его child-элементе (элементы, находящиеся по иерархии внутри данного), однако если он бесполезен, мы пропускаем его, используя следующий параметр. Lengthofthechunk - число размером 4 байта, содержит сумму длины chunk’а и его длинны child-элементов. Chunkdata – это поле может иметь разную длину, в нем содержится реально хранимая информация.
В данной таблице представлена зависимость ветвления и размера в объектах chunk:
Offset |
Length |
||
0 |
2 |
Chunk identifier |
|
2 |
4 |
Chunk length: chunk data + sub-chunks (6+n+m) |
|
6 |
n |
Data |
|
6+n |
m |
Sub-chunks |
|
Иерархия и код наиболее полезных chunk’ов в файле:
MAIN CHUNK 0x4D4D 3D EDITOR CHUNK 0x3D3D OBJECT BLOCK 0x4000 TRIANGULAR MESH 0x4100 VERTICES LIST 0x4110 FACES DESCRIPTION 0x4120 FACES MATERIAL 0x4130 MAPPING COORDINATES LIST 0x4140 SMOOTHING GROUP LIST 0x4150 LOCAL COORDINATES SYSTEM 0x4160 LIGHT 0x4600 SPOTLIGHT 0x4610 CAMERA 0x4700 MATERIAL BLOCK 0xAFFF MATERIAL NAME 0xA000 AMBIENT COLOR 0xA010 DIFFUSE COLOR 0xA020 SPECULAR COLOR 0xA030 TEXTURE MAP 1 0xA200 BUMP MAP 0xA230 REFLECTION MAP 0xA220 [SUB CHUNKS FOR EACH MAP] MAPPING FILENAME 0xA300 MAPPING PARAMETERS 0xA351 KEYFRAMER CHUNK 0xB000
Важно не забывать при чтении определенного chunk’а, необходимо вначале прочитать его отцов (элементов стоящих выше по иерархии). Например, для прочтения chunk’а VERTICES LIST мы должны прочитать MAIN CHUNK, 3D EDITOR CHUNK, OBJECT BLOCK и, наконец, TRIANGULAR MESH. Другие объекты, конечно, могут быть пропущены.
MAIN CHUNK 0x4D4D 3D EDITOR CHUNK 0x3D3D OBJECT BLOCK 0x4000 TRIANGULAR MESH 0x4100 VERTICES LIST 0x4110 FACES DESCRIPTION 0x4120 MAPPING COORDINATES LIST 0x4140
Таблица с более подробным описанием каждого chunk’а:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.