Определение состава и структуры автоматизированной системы визуализации технологических процессов, страница 2

У объекта chunk нелинейная структура, это значит что элементы, находящиеся по структуре внутри других, читаются только после того, как будут прочитаны (будет получен к ним доступ) элементы их содержащие. Структура имеет вид дерева, такую структуру можно наблюдать на локальных дисках компьютера. Конечно же, необязательно читать все объекты, достаточно прочитать только самые важные.

Надпись:  Рис. 1: Чтобы прочитать элемент 3:2, необходмо прочитать все в таком порядке - root, 1, 2, 3, 3:2

Каждый 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’а: