Particles are an easy to use, fast and efficient way to produce many different volumetric effects like
- and much more
normally they are quite tiny objects, that follow some laws like velocity, forces and so on...
each particle has some properties that are given to it by its ParticleSystem. those are:
float lifeTime; //!< The time this particle has to live. float lifeCycle; //!< The fraction of time passed. (in percentage of its lifeTime) Vector position; //!< The current position of this particle. Vector velocity; //!< The current velocity of this particle. Vector extForce; //!< The external Force that influences this Particle. Quaternion rotation; //!< The current rotation of this particle. float mass; //!< The mass of this particle. float massRand; //!< A random mass float radius; //!< The current size of this particle. float radiusRand; //!< a random Radius GLfloat color ; //!< A Color for the particles.
through the ParticleSystem, they are all animatable. (if you are interested in more detail how you can animate this stuff visit: this and goto ParticleSystem.
How It Works
The Diagram above shows how the flow of the ParticleEngine works.
- The driver(world.cc) tells the ParticleEngine what to do (either tick or draw)
- The ParticleEngine tells the ParticleEmitter's to emitt into their ParticleSystem's
- The ParticleEngine telss the ParticleSystem's to tick themselves. moves/iterates/removes particles
- The ParticleEngine tells the ParticleSystem's to draw themselves
- All the ParticleSystems are WorldEntitites and as such are drawn within the internal engine. So our framework acts as ParticleEngine
- Emitters have one/or no ParticleSystem in which they emit into. The ParticleSystems tell them to emit
- Systems have multiple emitters, and they are tickt and drawn in ORXONOX OM_ENVIRON_TICK (see ObjectManager)
/* create a ParticleSystem */ ParticleSystem* system = new SpriteParticles(100000); /* create a ParticleEmitter */ ParticleEmitter* emitter = new ParticleEmitter(Vector(-1, 0, 0), M_PI_4, 400, .5); /* let the emitter emit into system */ emitter->setSystem(system) // or system->addEmitter(emitter);
- lodeable this is the easiest version see the LoadParam page for more information on howto do this
you could also use one of the many functions, to let the Particles look better, but this is for you to decide.