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

Использование частицванимации

вается функция 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.

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