- •Введение
- •Глава 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
- •Предметный указатель
Использование формата файла .X |
119 |
//Получить имя фрейма (назначить новое, если не было найдено) if((Frame->Name = GetObjectName(pDataObj)) == NULL)
Frame->Name = strdup("No Name") ;
//связать структуру фрейма в список
if(Data == NULL) {
// связать как родственник корневого Frame->pFrameSibling = m_RootFrame; m_RootFrame = Frame;
Data = (void**)&m_RootFrame;
}else {
//связать как потомка текущего фрейма D3DXFRAME_EX *FramePtr = (D3DXFAME_EX*)*Data; Frame->pFrameSibling = FramePtr->pFrameFirstChild; FramePtr->pFrameFirstChild = Frame;
Data = (void**)&Frame;
}
}
return ParseChildObjects(pDataObj,Depth,Data,Reference);
};
cXFrameParser Parser; Parser.Parse("frames.x");
// Parser.m_RootFrame теперь указывает на корневой фрейм иерархии
Вот и все. После завершения функции cXFrameParser::Parse у вас будет хранящаяся самостоятельно иерархия фреймов, готовая к использованию в ваших проектах. Чтобы лучше понять, как использовать этот класс, посмотрите демонстрационную программу ParseFrame компакт-диска книги (смотрите конец главы для дополнительной информации). Демонстрационная программа ParseFrame загружает выбранный вами.Х файл и отображает иерархию объектов
вокне списка.
Воставшейся части книги вы увидите, как использовать иерархию фреймов для создания анимации.
Загрузка анимации из .X
Хотя такое базовое понятие как анимация заслуживает своего рассмотрения, я отложу обсуждение загрузки данных анимации до глав по работе с заранее вычисленной анимацией, потому что это больше соответствует порядку книги. Данные анимации могут быть в любом формате (как и все данные), но в оставшихся главах книги вы поймете, как создать свой набор шаблонов анимации для использования в проектах. Не волнуйтесь, все получиться, просто не сдавайтесь!
120 . |
Глава 3 |
Загрузка специализированных данных из .X
Как я говорил повсюду в этой главе, формат файла .X является полностью открытым; не существует ограничений на хранимые типы данных. Имея это ввиду, вы можете создать хранилище любого типа данных, и получить доступ к этим данным будет не сложнее, чем к мешам или фреймам, рассмотренным выше.
Вернемся к шаблону ContactEntry и посмотрим, как анализировать .X файл и отобразить все экземпляры ContactEntry. Как и раньше небольшой, унаследованный от cXParser, нам отлично подойдет.
// Сначала объявим GUID ContactEntry #include "initguid.h" DEFINE_GUID(ContactEntry, \
0x4c9d055b, 0xc64d, 0x4bfe, 0xa7, 0xd9, 0x98, \ 0x1f, 0x50, 0x7e, 0x45, 0xff);
// Now, define the .X parser class class cXContactParser : public cXParser
public:
BOOL ParseObject(IDirectXFileData *pDataObj, \ IDirectXFileData *pParentDataObj, \ DWORD Depth, \
void **Data, BOOL Reference)
//пропустить ссылочные объекты if(Reference == TRUE)
return TRUE;
//убедиться, что анализируемый объект - ContactEntry if(*GetObjectGUID(pDataObj) == CONTACTENTRY) {
//Получить указатель на данные и их размер
DWORD DataSize;
DWORD *DataPtr;
DataPtr = (DWORD*)GetObjectData(pDataObj, &DataSize);
//Получить имя из объекта данных char *Name = (char*)*DataPtr++;
//Получить номер телефона из объекта данных char *PhoneNum = (char*)*DataPtr++;
//Получить возраст из объекта данных
DWORD Age = *DataPtr++;
// Отобразить контактную информацию char Text[1024];
sprintf(Text, "Name: %s\r\nPhone #: %s\r\nAge: %lu", \ Name, PhoneNum, Age);
MessageBox(NULL, Text, "Contact", MB_OK);
return ParseChildObjects(pDataObj,Depth,Data,Reference);
}