- •Введение
- •Глава 1. Подготовка к изучению книги
- •Установка DirectX SDK
- •Выбор отладочных или рабочих версий библиотек
- •Настройка вашего компилятора
- •Установка директорий DirectX SDK
- •Привязывание к библиотекам DirectX
- •Установка используемого по умолчанию состояния символа
- •Использование вспомогательного кода книги
- •Использование вспомогательных объектов
- •Проверка вспомогательных функций
- •Двигаясь дальше по книге
- •Глава 2. Синхронизация анимации и движения
- •Использование движения, синхронизированного по времени
- •Считывание времени в Windows
- •Анимирование с использованием временных меток
- •Перемещение, синхронизированное со временем
- •Движение вдоль траекторий
- •Создание анализатора маршрутов .X файла
- •Создание внутриигровых кинематографических последовательностей
- •Посмотрите демонстрационные программы
- •TimedAnim
- •TimedMovement
- •Route
- •Cinematic
- •Глава 3. Использование формата файла .X
- •Работа с .X шаблонами и объектами данных
- •Определение шаблонов
- •Работа со стандартными шаблонами DirectX
- •Открытие .X файла
- •Перечисление объектов данных
- •Получение данных объекта
- •Создание класса .X анализатора
- •Загрузка мешей с использованием D3DX
- •Загрузка мешей, используя анализатор .X
- •Загрузка скелетных мешей
- •Загрузка анимации из .X
- •Загрузка специализированных данных из .X
- •Посмотрите демонстрационные программы
- •ParseFrame
- •Глава 4. Работа со скелетной анимацией
- •Начало скелетной анимации
- •Использование структур скелетов и иерархий костей
- •Использование скелетной структуры и скелетного меша
- •Загрузка иерархий из .X
- •Изменение положения костей
- •Обновление иерархии
- •Работа со скелетными мешами
- •Загрузка скелетных мешей из .X
- •Создание контейнера вторичного меша
- •Сопоставление костей фреймам
- •Обновление скелетного меша
- •Визуализация скелетных мешей
- •Глава 5. Использование скелетной анимации, основанной на ключевых кадрах
- •Использование наборов скелетных анимаций, основанных на ключевых кадрах
- •Использование ключей при анимации
- •Работа с четырьмя типами ключей
- •Считывание данных анимации из .X файлов
- •Прикрепление анимации к костям
- •Обновление анимации
- •Посмотрите демонстрационные программы
- •Глава 6. Комбинирование скелетных анимаций
- •Комбинирование скелетных анимаций
- •Соединение преобразований
- •Улучшение объектов скелетной анимации
- •Посмотрите демонстрационные программы
- •Глава 7. Создание кукольной анимации
- •Работа с физикой твердого тела
- •Создание твердого тела
- •Расположение и ориентирование твердых тел
- •Обработка движения твердых тел
- •Использование сил для создания движения
- •Соединение твердых тел с помощью пружин
- •Обеспечение обнаружения столкновений и ответной реакции
- •Создание систем кукольной анимации
- •Определение состояния твердого тела
- •Хранение костей
- •Создание класса управления куклой
- •Создание данных костей
- •Вычисление ограничивающего параллелепипеда кости
- •Установка сил
- •Объединение костей
- •Обработка столкновений
- •Восстановление соединений костей
- •Перестроение иерархии
- •Посмотрите демонстрационные программы
- •Глава 8. Работа с морфирующей анимацией
- •Морфинг в действии
- •Определение исходного и целевого меша
- •Морфинг мешей
- •Создание морфированного меша при помощи обработки
- •Визуализация морфированных мешей
- •Расчленение наборов
- •Создание морфирующего вершинного шейдера
- •Посмотрите демонстрационные программы
- •Глава 9. Использование морфирующей анимации, основанной на ключевых кадрах
- •Использование наборов морфируемой анимации
- •Создание шаблонов .X для морфируемой анимации
- •Загрузка данных морфируемой анимации
- •Визуализации морфированного меша
- •Получение данных морфируемого меша из альтернативных источников
- •Посмотрите демонстрационные программы
- •Глава 10. Комбинирование морфированных анимаций
- •Комбинирование морфированных анимаций
- •Использование базового меша в комбинированных морфированных анимациях
- •Вычисление разностей
- •Комбинирование разностей
- •Создание вершинных шейдеров комбинированного морфирования
- •Использование вершинного шейдера морфируемого комбинирования
- •Посмотрите демонстрационные программы
- •Глава 11. Морфируемая лицевая анимация
- •Основы лицевой анимации
- •Использование комбинированного морфирования
- •Использования фонем для речи
- •Создание лицевых мешей
- •Создание базового меша
- •Создание выражений лица
- •Создание мешей визем
- •Создание анимационных последовательностей
- •Создание последовательностей фонем
- •Использование анализатора файлов .X для последовательностей
- •Проигрывание лицевых последовательностей со звуком
- •Использование DirectShow для звука
- •Синхронизация анимации со звуком
- •Зацикливание воспроизведения звуков
- •Посмотрите демонстрационные программы
- •Глава 12. Использование частиц в анимации
- •Работа с частицами
- •Основы
- •Рисование частиц с помощью квадратных полигонов
- •Работа с точечными спрайтами
- •Улучшения визуализации частиц при помощи вершинных шейдеров
- •Оживление частиц
- •Передвижение частиц при помощи скорости
- •Использование интеллекта при обработке
- •Создание и уничтожение частиц
- •Управление частицами с помощью класса
- •Использование излучателей в проектах
- •Создание движков частиц в вершинных шейдерах
- •Посмотрите демонстрационные программы
- •Глава 13. Имитирование одежды и анимация мешей мягких тел
- •Имитация одежды в ваших проектах
- •Получение данных одежды из мешей
- •Приложение сил для создания движения
- •Воссоздание и визуализация меша одежды
- •Восстановление исходного меша
- •Добавление дополнительных пружин
- •Загрузка данных масс и пружин из .X файла
- •Создание анализатора .X данных одежды
- •Работа с обнаружением столкновений и реакцией на них
- •Определение объектов столкновений
- •Обнаружение и реакция на столкновения
- •Создание класса меша одежды
- •Использование мешей мягких тел
- •Восстановление мешей мягких тел
- •Посмотрите демонстрационные программы
- •Глава 14. Использование анимированных текстур
- •Использование анимации текстур в ваших проектах
- •Работа с преобразованиями текстур
- •Создание преобразования текстур
- •Установка матриц преобразования текстуры
- •Использование преобразования текстур в проектах
- •Использование файлов видео в качестве текстур
- •Импорт видео при помощи DirectShow
- •Создание специализированного фильтра
- •Работа со специализированным фильтром
- •Создание менеджера анимированных текстур
- •Окончание современной анимации
- •Веб-сайты
- •Рекомендуемые книги
- •DirectX 9.0 SDK
- •GoldWave Demo
- •Paint Shop Pro Trial Version
- •TrueSpace Demo
- •Microsoft Agent and LISET
- •Предметный указатель
Глава 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 файла), следуют объекты данных. Они объявляются совсем как структуры С - вы задаете структуру именем шаблона класса и следующим после него названием экземпляра объекта данных. Имя экземпляра является необязательным, так что не волнуйтесь, когда не найдете имени у некоторых объектов.