Как известно, системы частиц состоят из отдельных объектов, имеющих своими характеристиками (опционально): геометрию, время рождения, время жизни, начальное положение, скорость и еще много-много других параметров. Давайте рассмотрим, как к этому вопросу подходит известный движок трехмерной графики для Flash - Away3D в текущей на данный момент ветке 4.1.
Итак, для начала где-то нужно хранить всю геометрию. В Away3D геометрию частиц можно задавать совершенно произвольной, например выделим для этих целей плоскость:
Здесь мы создаем count частиц с геометрией плоскости размером size×size. На данном этапе надо определиться, что Вам нужно от частиц. Напрямую Away3D позволяет задать множество параметров. Для этого мы определяем объект типа ParticleAnimationSet в конструкторе которого указываем как мы будем генерировать частицы по времени. 1-й параметр - как долго будет видно частицу, 2-й - будет ли частица использоваться повторно, 3-й - будет ли задержка между смертью и возрождением частицы. Все цифровые значения для этих флагов задаются в специальной функции, которая вызывается для каждой частицы и которую пользователь сам же и определяет:
В этой функции мы имеем доступ до свойств каждой частицы в системе через индекс prop.index и в ней же задаем другие параметры, как то положение, скорость и т.д. Но для задания других свойств необходимо в объект типа ParticleAnimationSet, определенный выше, добавить объект состояния анимации. Их в движке несколько:
- ParticleAccelerationNode - вектор постоянного ускорения
- ParticleBezierCurveNode - положение частицы вдоль кривой Безье
- ParticleBillboardNode - необходимо добавить, чтобы геометрия частицы всегда была обращена к камере
- ParticleColorNode - изменения цвета частицы
- ParticleFollowNode - поведение следования частицы за назначенной целью
- ParticleOrbitNode - положения частицы по круговой орбите
- ParticleOscillatorNode - положение частицы при простых гармонических колебаниях
- ParticlePositionNode - начальное положение частицы
- ParticleRotateToHeadingNode - вращение для соответствия heading-вектору (?)
- ParticleRotationalVelocityNode - начальная скорость вращения
- ParticleScaleNode - изменение масштаба
- ParticleSpriteSheetNode - для использования анимации кадров текстуры спрайта
- ParticleTimeNode - для сохранения времени внутри частицы
- ParticleUVNode - UV смещение и масштаб
- ParticleVelocityNode - начальная скорость
Давайте зададим для примера несколько свойств:
И, соответственно, в функции _initParticleProps для каждой частицы определим заданные значения:
Мы задали установку для поворота каждой частицы всегда перпендикулярно вектору направления камеры, случайную скорость от 150 до 300 только вверх и случайное положение частицы в плоскости xz от -100 до 100.
Для того, чтобы наша частица была видна, определим для неё материал, к примеру типа TextureMaterial с режимом смешивания ADD:
Далее собираем все частицы в один Mesh, подключаем к нему анимацию, добавляем на сцену и запускаем:
Это весь процесс создания системы частиц для Away3D 4.1. А дальше всё зависит от фантазии. И примеров тому уже масса даже в официальных источниках движка, например.
Комментариев нет:
Отправить комментарий