Поле pos содержит текущее положение частицы, а поле velocity - ее скорость.
Поле mass содержит значение массы данной частицы, а поле color - текущее значение ее цвета.
Текущий размер частицы содержится в поле size.
Также с каждой частицей связывается текстура texture.
Для удобства анимации с каждой частицей связывается время ее рождения (timeOfBirth), продолжительность жизни частицы (lifeTime) и время, когда состояние частицы последний раз было изменено (lastUpdateTime).
Метод isAlive служит для определения необходимости уничтожения частицы в связи с истечением ее срока жизни, а метод kill помечают частицу для уничтожения.
При необходимости работы с частицами, содержащими дополнительные атрибуты, можно строить новые структуры, унаследованные от структуры Particle.
Класс ParticleSystem представляет собой базовый класс для создания различных типов систем частиц и работы с ними; ниже приводится его описание.
га
class ParticleSystem : public VisualObject {
protected:
int particleSizelnBytes;
MemoryPool * pool;
// pool used to allocate/free particles Particle * start;
// first particle in the list int numParticles;
float lastCreationTime;
// time the last particle was created float birthPeriod;
// period of particle creation int srcBlendingMode;
// OpenGL blending modes int dstBlendingMode;
А. В. Боресков. Графика трехмерной компьютерной игры publi С:
ParticleSystem ( const char * theName, const Vector3D&
thePos, int particlesPerSecond ) ; -ParticleSystem ();
virtual int init ();
virtual void update ( Controller * controller,
float curTime );
virtual bool isTransparent () const {
return true; // assume all particle systems
// are semitransparent
}
void insert ( Particle * );
void remove ( Particle * );
void setBlendingMode ( int src, int dst ) {
srcBlendingMode = src; dstBlendingMode = dst;
}
intgetNumParticles () const {
return numParticles;
}
static MetaClass classlnstance; protected:
virtual void doDraw ( View& view,