То есть, скажем, CHUNK_OBJMESH нам надо знать из-за того, что каждый объект в сцене описывается блоком CHUNK_OBJBLOCK, который появляется только как подблок CHUNK_OBJMESH, и просто игнорировать весь CHUNK_OBJMESH из-за этого нельзя. Кроме того, они задают структуру - например, все данные, что относятся к текущему блоку CHUNK_OBJBLOCK, относятся к текущему объекту, а подблоки этого блока уже могут быть разбросаны как угодно.
А теперь - относительно полное описание того, какие данные содержатся в каждом из блоков. Будут использоваться следующие обозначения:
char[] | ASCIIZ-строка (ASCII-строка, оканчивающаяся нулем) |
byte | 8-битное беззнаковое целое число |
word | 16-битное беззнаковое целое число |
dword | 32-битное целое число |
float | 32-битное число с плавающей запятой |
vector | float x,z,y |
Здесь (в самой последней строчке) опечатки нет! В файле 3DS везде изменен порядок следования y и z; то есть в файле данных ось y смотрит вглубь экрана, а ось z - вверх. Несмотря на то, что в самой 3D Studio ось y смотрит как раз вверх, а z - вдаль.
Блок: | CHUNK_VERTLIST |
Данные: | список вершин текущего объекта |
Формат: |
word num; // число вершин vector vertices[num]; // координаты каждой из вершин |
Блок: | CHUNK_FACELIST |
Данные: | список граней текущего объекта |
Формат: | word num; // число граней struct { // word v0; // номер первой вершины грани word v1; // номер второй вершины грани word v2; // номер третьей вершины грани word flags; // флаги грани } faces[num]; // собственно список граней |
Блок: | CHUNK_FACEMAT |
Данные: | название материала и список тех граней объекта, которым назначен этот материал; таких блоков может быть несколько (грани с разными материалами в одном объекте), а может вообще не быть, если объекту материалы вообще не назначены (нетекстурированный объект) |
Формат: | char name[]; // название материала word num; // число граней из этого материала word face_nums[num]; // список номеров граней из этого // материала |
Блок: | CHUNK_MAPLIST |
Данные: | текстурные координаты вершин текущего объекта |
Формат: |
word num; // число вершин struct { // float u; // координата текстуры U // (по горизонтали) float v; // координата текстуры V // (по вертикали) } texcoords[num]; // собственно список текстурных // координат
Текстурные координаты задаются в диапазоне 0..1. |