const Cameras camera, const Frustrum& frustrum, Fog * fog );
virtual void createParticle ( float curTime ) = 0,-void updateBoundingBox ();
};
Как видно из описания, каждая система частиц содержит размер структуры, используемой для описания частиц в переменной particleSizelnBytes. Использование этой переменной позволяет дочерним классам добавлять до-
Добавляем эффекты
полнительные атрибуты к частицам. При этом необходимо, чтобы структура, используемая для описания таких частиц, была унаследована от структуры Particle и чтобы можно было выставить величину particleSizelnBytes, равной размеру этой структуры. При соблюдении этих правил система будет нормально функционировать.
Для выделения памяти под частицы используется пул, а не конструкция new, что объясняется соображениями эффективности, поскольку создание и уничтожение отдельных частиц будет происходить очень часто, а операции new и delete достаточно дорогостоящие.
Также в системе хранится общее число частиц (питР articles), ссылка на первую частицу в списке (start), время, когда последний раз была создана частица (lastCreationTime), средний интервал времени между созданием новых частиц (birthPeriod) и режим наложения (srcBledningMode и dstBlend-ingMode).
Метод doDraw служит для отрисовки системы, и дочерние классы, как правило, могут использовать его без переопределения. Он просто задает необходимый режим наложения и выводит все частицы системы как панели.
0| аж.
void ParticleSystem :: doDraw ( Views view, const Cameras
camera, const Frustrums frustrum, Fog * fog )
{
glDepthMask ( GL_FALSE ) ,-
view.blendFunc ( srcBlendingMode, dstBlendingMode );
for ( Particle * cur = start; cur != NULL; cur = cur -> next ) view.drawBillboard ( cur -> pos, cur -> size,
color * cur -> color, cur -> texture );
glDepthMask ( GL_TRUE );
}
Также в классе ParticleSyste определяется метод update. Этот метод выполняет следующие функции: он создает новые частицы и удаляет те частицы, время жизни которых закончилось. Подклассы должны переопределить данный метод, если они хотят добавить какую-либо динамику частицам, но при этом переопределенный метод должен вызывать ParticleSys-tem:.-update для создания новых и уничтожения старых частиц.