- •Введение
- •Глава 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
- •Предметный указатель
Использование частицванимации
вается функция Update, что позволяет классу решать, какие частицы добавить, какие обновить, а какие удалить. Это все простые манипуляции со связанным списком, так что я пропущу код, который вы можете найти на компакт-диске.
На самом деле, вы уже видели все, связанное с излучателями частиц, в этой главе: от связанного списка частиц до обработки движения и столкновений и их визуализации. На данный момент осталось не так уж и много повторить. Если вы посмотрите код демонстрационных программ этой главы, вы увидите, как я создал класс излучателя частиц, который управляет всеми типами частиц, излучателей и визуализирует частицы при помощи трех методов, рассмотренных в самом начале этой главы.
Использование излучателей в проектах
Хорошо-хорошо, достаточно кода класса; давайте посмотрим, как со всем этим работать. Для создания излучателя необходимо создать экземпляр класса излучателя так:
cParticleEmitter Emitter;
Теперь вызовите функцию Create излучателя, чтобы поместить излучатель в центр трехмерного мира. Также задайте используемый тип излучателя.
Emitter.Create(pDevice, \ &D3DXVECTOR3(0.0f, 0.0f, 0.0f), \ EMITTER_CLOUD);
После того как вы создали излучатель, можно начинать добавлять в него частицы с помощью функции Add, или можете вызвать функцию Update, которая добавит частицы за вас.
Emitter.Add(PARTICLE_SMOKE, \ &D3DXVECTOR3(0.0f, 0.0f, 0.0f), \ 10.0f, 0xFFFFFFFF, 2000, \ &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
После того как вы добавили частицы в сцену, необходимо обновить их с помощью функции Update и визуализировать частицы.
Emitter.Update(ElapsedTime);
Emitter.Begin(&matView, &matProj);
Emitter.Render();
Emitter.End();
Это является, в каком то роде, полупопыткой показать, как использовать классы частиц, но я рекомендую посмотреть демонстрационные программы, располо-
370 |
Глава 12 |
женные на компакт-диске книги. Эти демонстрационные программы намного лучше показывают, что вы можете делать с помощью частиц в своих проектах.
Создание движков частиц в вершинных шейдерах
Хорошо, вы знали, что кто-то должен был создать их! На самом деле существует способ создать движок частиц, который бы полностью выполнялся внутри вершинного шейдера. Вы можете найти этот вершинный шейдер на сайте Nvidia http://developer.nvidia.com/view.asp?IO=Particle_System.
В основе работы этого вершинного шейдера лежит то, что вы определяете структуру вершин, содержащую скорость частицы; используя эту скорость, вы определяете, на сколько переместить частицу, основываясь на прошедшем времени. Для визуализации частицы используются точечные спрайты, т. е. вы можете представить каждую частицу одной вершиной (находящейся в буфере вершин).
Я не хочу изобретать колесо, но при помощи информации, полученной в этой главе, вы должны понять, что происходит в вершинном шейдере частиц. Для каждой частицы, которую получает для визуализации шейдер (точечный спрайт), вычисляются положение, цвет и размер. Эти вычисления основываются на переменной прошедшего времени, устанавливаемой через константы шейдера. Вы уже видели, как перемещать частицы, основываясь на их скорости - это простое умножение вектора скорости на величину прошедшего времени. То же самое происходит для цвета и размера - они вычисляются умножением соответствующих величин на количество прошедшего времени.
Посмотрите демонстрационные программы
На компакт-диске этой книги вы обнаружите три проекта, которые я создал для иллюстрации управления частицами. Эти проекты содержат код для добавления, удаления, визуализации частиц разнообразных типов, который вы можете использовать в собственных проектах для получения привлекательных эффектов частиц.
Результат выполнения всех трех программ одинаков (см. рис 12.8). Вертолет пролетает над лесом и группой людей. В этой демонстрационной программе используются частицы: пучки дыма, выдуваемые с земли перед вертолетом, деревья и люди. На самом деле используются три различных типа деревьев и два типа людей. Излучатель частиц имеет несколько дополнительных функций, которые добавляют частицы дыма и изменяют внешний вид людей во время выполнения демонстрационной программы. Как только вертолет пролетает над человеком, частица, представляющая человека, меняет свой тип. Когда вертолет отлетает от
Использованиечастицванимации |
371 |
человека, частица опять меняется на другую. Посмотрите демонстрационную программу, чтобы понять, что я имею ввиду.
Как вы можете видеть, использование частиц зависит от проекта. То, что подходит для одного проекта, может не сработать для другого. По этой причине в этой главе было дано не так много, за исключением основной теории и основных знаний. Небольшое пожелание: убедитесь, что посмотрели демонстрационные программы, содержащиеся на компакт-диске.
Рис. 12.8. Apache пикирует над головами любителей деревьев
Программы на компакт диске
В директории главы 12 компакт-диска книги, вы обнаружите три проекта, которые иллюстрируют использование трех методов рисования частиц, показанных в этой главе. Этими проектами являются:
•Particles. Этот проект иллюстрирует рисование частиц, использующих квадраты, основанное на первой рассмотренной в этой главе технологии. Он расположен в \BookCode\Chap12\Particles.
•ParticlesPS. Этот проект иллюстрирует использование точечных спрайтов для рисования частиц. Он расположен в \BookCode\Chap12\ParticlesPS.
•ParticlesVS. Этот последний проект иллюстрирует использование вершинного шейдера для визуализации частиц. Он расположен в \BookCode\Chap12\ParticlesVS.