Интернет магазин китайских планшетных компьютеров



Компьютеры - X (формат файлов)

22 февраля 2011


Оглавление:
1. X (формат файлов)
2. Пример экспорта квадрата из 3DS MAX
3. Анимация



Формат X файла — формат файла для хранения 3D объектов, созданный компанией Microsoft.

Этот формат хранит информацию о геометрии 3D объекта, текстурные координаты, описание материалов, пути и названия к текстурам, которые используются. Хранится иерархия объектов, хранится анимация, и хранятся привязки вершин к «костям» с описанием весов. В X файле может отсутствовать какая-либо информация об объекте.

X файл может быть текстовым либо бинарным.

Структура X Файла

В начале X файла идёт заголовок, затем идёт описание информации об объекте. Описание информации может быть в произвольном порядке, но заголовок всегда идёт в самом начале.

Описание заголовка

Заголовок имеет следующий вид:

Тип Подтип Размер Содержит Пояснение
Магическое слово 4 байта "xof "
Номер версии формата основной номер 2 байта 03 Основной номер версии формата — 3
дополнительный номер 2 байта 02 Дополнительный номер версии формата — 2
Тип формата 4 байта "txt " Текстовый формат
"bin " Бинарный формат
"com " Сжатый формат
Тип сжатия 4 байта "lzw "
"zip "
«и т. д.»
Размер в битах дробного числа 4 байта 0064 64 битное число
0032 32 битное число

Заголовок всегда в текстовом виде и обычно выглядит так: xof 0303txt 0032

Далее, обычно, идёт описание Templates. Это своеобразная подсказка, чтобы лучше понять какие данные и в каком виде представлены.

Вообще порядок описания данных в X файле может быть произвольным. Ниже следует описание в таком порядке, в котором X файл генерируют популярные экспортёры.

После описания Templates обычно следует описание самого объекта. Сам объект может быть простым или составным. Для того чтобы хранить сложные составные объекты разработали иерархию связей, через которую можно понять, какой объект с каким связан или от какого зависим. Эти данные используются например в скелетной анимации. Если двигать «кость» плеча, то должны двигаться и все зависимые от неё «кости» — это вся рука. В иерархии связь так и хранится в явном виде. На вершине находится плечо, затем предплечье, затем кисть, далее от кости идёт несколько пальцев, которые друг от друга независимы, но зависимы от кисти, и далее следуют фаланги пальца.

В X-файле иерархия описана через ключевое слово Frame. За ключевым словом следует имя данного узла иерархии и фигурные скобки.

Пример:

Frame TopBone { }

Все узлы, вложенные в фигурные скобки TopBone { }, будут зависимы от этого узла. Вложенность может быть неограничено глубокой. Узлы, не вложенные в TopBone { }, будут независимыми друг от друга.

Пример вложенных узлов иерархии:

Frame TopBone {
 
Frame Bone2 {}
 
}

Здесь Bone2 зависим от TopBone и изменения, которые происходят с TopBone, влияют и на Bone2. Изменения с Bone2 не влияют на TopBone.

Пример независимых узлов:

Frame TopBone {}
 
Frame Bone2 {}

Вообще в X файле может и не быть иерархии. Экспортёр от Microsoft в вершину иерархии всегда ставит узел SCENE_ROOT или DXCC_ROOT независимо от того, есть в этом необходимость или нет.

Поле Frame имеет следующий вид:

Название поля UUID
Frame <3D82AB46-62DA-11cf-AB39-0020AF71E433>
Названия членов поля Тип размер данных Дополнительные сведения
FrameTransformMatrix
Примечание Если это поле отсутствует внутри Frame,
то не нужно производить никаких локальных трансформаций
Mesh
Примечание Количество Mesh может быть любым внутри Frame

Пример Frame со всеми полями:

Frame Имя {

FrameTransformMatrix {}

Mesh Имя {}

}

Исторически сложилось, что объекты в 3DS MAX хранятся в своих локальных координатах. Хранится матрица трансформации этого объекта. Всё, что рисуется на сцене 3DS MAX, — рисуется в глобальных координатах. При экспортировании из 3DS MAX экспортёр не проводит анализа сцены и сохраняет её так, как есть. Ещё можно экспортировать только выбранный объект из всей сцены. Эти два условия и привели к рождению Frame, чтобы сохранить матрицу трансформации в FrameTransformMatrix и сохранению локальных координат объектов 3D объекта, а не глобальных.

Если требуется, можно сохранить и глобальные координаты без Frame и FrameTransformMatrix, но стандартный экспортёр от Microsoft этого не делает.

Матрица трансформации FrameTransformMatrix представляет собой матрицу аффинных преобразований в однородных координатах. Пример матрицы трансформации:

FrameTransformMatrix {
 
1.000000,0.000000,0.000000,0.000000,
 
0.000000,1.000000,0.000000,0.000000,
 
0.000000,0.000000,1.000000,0.000000,
 
0.000000,0.000000,0.000000,1.000000;;}

Синтаксис должен быть именно таким, как показано в данном примере.

Далее, если требуется, следует описание геометрии после ключевого слова Mesh.

Cинтаксис следующий:

Mesh Имя_Меша {}

Если производится экспорт из 3DS MAX, то Имя_Меша совпадает с именем узла иерархии. И из 3DS MAX данные не экспортируются так, чтобы на один Frame приходилось несколько Mesh, хоть стандарт файла этого и не запрещает.

Поле Mesh имеет следующий вид:

Название поля UUID
Mesh <3D82AB44-62DA-11cf-AB39-0020AF71E433>
Названия членов поля Тип размер данных Дополнительные сведения
nVertices DWORD Любой
vertices массив Vector nVertices
nFaces DWORD
faces массив MeshFace nFaces
Примечание Это поле определяет базовую геометрию меша. Первый массив - это перечень координат вершин,второй - определяет фейсы. Три числа фейса - это индексы первого массива.
Поля, которые могут быть внутри поля Mesh
MeshFaceWraps Если этого поля нет, то wrapping for both u and v defaults to false.
MeshTextureCoords Если этого поля нет, то нет и текстурных координат
MeshVertexColors Если этого поля нет, то цвет определён белым
MeshMaterialList Если этого поля нет, то материал - белый

Поле MeshFaceWraps редко встречается в файлах. В этом поле хранятся текстурные координаты.

формат поля:

Название поля UUID
MeshFaceWraps <4885AE62-78E8-11cf-8F52-0040333594A3>
Названия членов поля Тип размер данных Дополнительные сведения
nFaceWrapValues DWORD нет
faceWrapValues Boolean2d
Примечание This template is used to define the texture topology of each face in a wrap. nFaceWrapValues should be equal to the number of faces in a mesh.

В поле MeshTextureCoords хранятся текстурные координаты. формат поля:

Название поля UUID
MeshTextureCoords <F6F23F40-7686-11cf-8F52-0040333594A3>
Названия членов поля Тип размер данных Дополнительные сведения
nTextureCoords DWORD нет
textureCoords массив Coords2d nTextureCoords
Примечание Это поле определяет текстурные координаты меша

В поле MeshVertexColors хранится цвет вершины. Обычно поля MeshTextureCoords и MeshVertexColors являются взаимоисключаемыми, т. к. если есть текстурные координаты, то цвет точек не используется.

Название поля UUID
MeshVertexColors <1630B821-7842-11cf-8F52-0040333594A3>
Названия членов поля Тип размер данных Дополнительные сведения
nVertexColors DWORD нет
vertexColors массив IndexedColor nVertexColors
Примечание Это поле определяет цвет меша

В поле MeshMaterialList хранится список материалов, используемых для отображения данного меша. В этом списке указываются и текстуры, в которые «одет» меш. Сама текстура не хранится в X файле.

Название поля UUID
MeshMaterialList <F6F23F42-7686-11cf-8F52-0040333594A3>
Названия членов поля Тип Размер данных Дополнительные сведения
nMaterials DWORD Материал
nFaceIndexes DWORD
FaceIndexes массив DWORD nFaceIndexes
vertexColors массив IndexedColor nVertexColors
Примечание
Это поле предназначенно для того, чтобы показать на каком фейсе меша какой материал используется. nMaterials показывает сколько материалов в данном меше.


Просмотров: 3026


<<< X BitMap