Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
DirectX. Продвинутая Анимация (2004) [rus].pdf
Скачиваний:
335
Добавлен:
16.08.2013
Размер:
8.39 Mб
Скачать

Глава 3

Использование формата файла .X

Вашим трехмерным мешам необходимо место обитания... или скорее вам необходимо место для хранения их данных (не беря во внимание остальные данные, требуемые вашим проектом игры). Что же делать разработчику - придумывать собственный формат файла или использовать сторонний? Имея столь широкий ассортимент популярных форматов, легко выбрать нужный, но как насчет ограничений, накладьшаемых некоторыми форматами? Почему бы вам не использовать чей-нибудь формат, изменив его для своих нужд?

Этим кто-нибудь является не кто иная, как Microsoft с ее форматом - .X! Посмотрите правде в глаза-.X файлы очень легко использовать, когда вы их поймете,

иэта глава предоставит вам все необходимые сведения.

Вэтой главе вы научитесь:

Использовать файлы .X в ваших игровых проектах;

Определять и анализировать .X шаблоны;

Создавать объекты из шаблонов;

Загружать меши и иерархии фреймов;

Создавать и загружать специализированные данные.

Работа с .X шаблонами и объектами данных

Если вы еще не видели, я хочу показать вам один их тех загадочных .X файлов, поставляемый с DirectX SDK (расположенный в установочной директории DirectX \Samples\Multimedia\Media). Смелее, я вам разрешаю. Более чем вероятно, вы увидите что то вроде этого:

Использованиеформатафайла.X

83

xof 0302txt 0032

template Header {

<3D82AB4 3-62DA-11cf-AB39-0020AF71E433> DWORD major;

DWORD minor; DWORD flags;

template Frame {

<3D82AB4 6-62DA-11cf-AB3 9-0020AF71E433> [FrameTransformMatrix]

[Mesh]

Header { 1; 0; 1;

Frame Scene_Root { 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;

}

Frame Pyramid_Frame { 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 PyramidMesh { 5;

0.00000;10.00000;0.00000;, -10.00000;0.00000;10.00000;, 10.00000;0.00000;10.00000;, -10.00000 ;0.00000;-10.00000;, 10.00000;0.00000;-10.00000;; 6; 3;0,1,2;, 3;0,2, 3;, 3;0,3,4;,

3;2,4,3;; MeshMaterialList

1;

6;

0,0,0,0,0,0;;

Использование формата файла .X

Посмотрев еще раз на пример .X файла, вы можете видеть, что первым встреченным шаблоном является "Header", который является названием класса шаблона. Шаблон "Header" содержит три значения DWORD (наряду с большим числом, называемым GUID, которое заключено в угольные кавычки), которые вы задаете при создании объекта из шаблона. Создание объекта во многом похоже на создание класса или структуры. В ранее упомянутом примере .X файла описание шаблона "Header" выглядит так:

Header {

1; // старший 0; // младший

1; // флаги

}

Заметьте, что вы должны определять все переменные, содержащиеся в шаблоне "Header" в вашем объекте данных, причем в таком же порядке. Вас, возможно, заинтересовало большое число (шаблонный GUID), определенное в шаблоне. Как оно связано с заданием шаблона? На самом деле никак, потому что DirectX использует это большое число для идентификации шаблона, при его загрузке. Я вернусь к шаблонному GUID (Глобально Уникальное Идентификационное Число) через мгновение.

Совет. Совсем как в C/C++ вы можете использовать оператор "//" для обозначения комментариев в .X файлах.

Следующий шаблон, который вы увидите в .X файле, - "Frame". Это специальный шаблон, он не определяет никакого типа данных, зато ссылается на другие классы шаблонов. Другие классы шаблонов, заключенные в квадратные скобки, называются "FrameTransformMatrix" и "Mesh". Используя ссылки на другие шаблоны, вы можете создавать иерархии объектов.

Также объявляя дополнительные шаблоны внутри другого шаблона, вы создаете набор шаблонных ограничений, которые позволяют вам создавать шаблоны, которые, в свою очередь, позволяют вставку заданных объектов в другой объект. В данном случае только объекты типов "FrameTransformMatrix" и "Mesh" могут быть встроенны в объект "Frame". Более подробно о шаблонных ограничениях вы прочитаете далее в этой главе. А сейчас давайте перейдем к рассмотрению оставшейся части .X файла.

После объявления шаблонов (которое должно быть в начале .X файла), следуют объекты данных. Они объявляются совсем как структуры С - вы задаете структуру именем шаблона класса и следующим после него названием экземпляра объекта данных. Имя экземпляра является необязательным, так что не волнуйтесь, когда не найдете имени у некоторых объектов.

Соседние файлы в предмете Программирование на C++