Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

# osgParticle::ParticleSystem Class Reference

The heart of this class library; its purpose is to hold a set of particles and manage particle creation, update, rendering and destruction. More...

Inheritance diagram for osgParticle::ParticleSystem:

[legend]
List of all members.

## Public Types
enum | Alignment { BILLBOARD, FIXED }
## Public Member Functions
| ParticleSystem ()
| ParticleSystem (const ParticleSystem &copy, const osg::CopyOp &copyop=osg::CopyOp::SHALLOW_COPY)
| META_Object (osgParticle, ParticleSystem)
Alignment | getParticleAlignment () const
| Get the alignment type of particles.
void | setParticleAlignment (Alignment a)
| Set the alignment type of particles.
const osg::Vec3 & | getAlignVectorX () const
| Get the X-axis alignment vector.
void | setAlignVectorX (const osg::Vec3 &v)
| Set the X-axis alignment vector.
const osg::Vec3 & | getAlignVectorY () const
| Get the Y-axis alignment vector.
void | setAlignVectorY (const osg::Vec3 &v)
| Set the Y-axis alignment vector.
void | setAlignVectors (const osg::Vec3 &X, const osg::Vec3 &Y)
| Set the alignment vectors.
const osg::BoundingBox & | getDefaultBoundingBox () const
| Get the default bounding box.
void | setDefaultBoundingBox (const osg::BoundingBox &bbox)
| Set the default bounding box.
bool | getDoublePassRendering () const
| Get the double pass rendering flag.
void | setDoublePassRendering (bool v)
| Set the double pass rendering flag.
bool | isFrozen () const
| Return true if the particle system is frozen.
void | setFrozen (bool v)
| Set or reset the frozen state.
int | numParticles () const
| Get the number of allocated particles (alive + dead).
int | numDeadParticles () const
| Get the number of dead particles.
bool | areAllParticlesDead () const
| Get whether all particles are dead.
Particle * | getParticle (int i)
| Get a pointer to the i-th particle.
const Particle * | getParticle (int i) const
| Get a const pointer to the i-th particle.
virtual Particle * | createParticle (const Particle *ptemplate)
| Create a new particle from the specified template (or the default one if `ptemplate` is null).
virtual void | destroyParticle (int i)
| Destroy the i-th particle.
virtual void | reuseParticle (int i)
| Reuse the i-th particle.
int | getLastFrameNumber () const
| Get the last frame number.
Particle & | getDefaultParticleTemplate ()
| Get a reference to the default particle template.
const Particle & | getDefaultParticleTemplate () const
| Get a const reference to the default particle template.
void | setDefaultParticleTemplate (const Particle &p)
| Set the default particle template (particle is copied).
bool | getFreezeOnCull () const
| Get whether the particle system can freeze when culled.
void | setFreezeOnCull (bool v)
| Set whether the particle system can freeze when culled (default is true).
void | setDefaultAttributes (const std::string &texturefile="", bool emissive_particles=true, bool lighting=false, int texture_unit=0)
| A useful method to set the most common `StateAttribute`'s in one call.
int | getLevelOfDetail () const
| (EXPERIMENTAL) Get the level of detail.
void | setLevelOfDetail (int v)
| (EXPERIMENTAL) Set the level of detail.
virtual void | update (double dt)
| Update the particles. Don't call this directly, use a `ParticleSystemUpdater` instead.
virtual void | drawImplementation (osg::State &state) const
| drawImplementation(State&) is a pure virtaul method for the actual implementation of OpenGL drawing calls, such as vertex arrays and primitives, that must be implemented in concrete subclasses of the Drawable base class, examples include osg::Geometry and osg::ShapeDrawable.
virtual osg::BoundingBox | computeBound () const
| Compute the bounding box around Drawables's geometry.
## Protected Types
typedef std::vector< Particle > | Particle_vector
typedef std::stack< Particle * > | Death_stack
## Protected Member Functions
virtual | ~ParticleSystem ()
ParticleSystem & | operator= (const ParticleSystem &)
void | update_bounds (const osg::Vec3 &p, float r)
void | single_pass_render (osg::State &state, const osg::Matrix &modelview) const
## Protected Attributes
Particle_vector | _particles
Death_stack | _deadparts
osg::BoundingBox | _def_bbox
Alignment | _alignment
osg::Vec3 | _align_X_axis
osg::Vec3 | _align_Y_axis
bool | _doublepass
bool | _frozen
osg::Vec3 | _bmin
osg::Vec3 | _bmax
bool | _reset_bounds_flag
bool | _bounds_computed
Particle | _def_ptemp
int | _last_frame
bool | _freeze_on_cull
int | _detail
int | _draw_count

## Detailed Description

The heart of this class library; its purpose is to hold a set of particles and manage particle creation, update, rendering and destruction.

You can add this drawable to any Geode as you usually do with other Drawable classes. Each instance of ParticleSystem is a separate set of particles; it provides the interface for creating particles and iterating through them (see the Emitter and Program classes).

## Member Typedef Documentation

typedef std::stack<Particle*> osgParticle::ParticleSystem::Death_stack`[protected]`

typedef std::vector<Particle> osgParticle::ParticleSystem::Particle_vector`[protected]`

## Member Enumeration Documentation

enum osgParticle::ParticleSystem::Alignment

  | Enumeration values:
  BILLBOARD |
  FIXED |

## Constructor & Destructor Documentation

osgParticle::ParticleSystem::ParticleSystem | ( |  | ) |

osgParticle::ParticleSystem::ParticleSystem | ( | const ParticleSystem & | copy,
|  | const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY
| ) |

virtual osgParticle::ParticleSystem::~ParticleSystem | ( |  | ) | `[protected, virtual]`

## Member Function Documentation

bool osgParticle::ParticleSystem::areAllParticlesDead | ( |  | ) | const`[inline]`

| Get whether all particles are dead.

virtual osg::BoundingBox osgParticle::ParticleSystem::computeBound | ( |  | ) | const`[virtual]`

| Compute the bounding box around Drawables's geometry. Reimplemented from osg::Drawable.

Particle * osgParticle::ParticleSystem::createParticle | ( | const Particle * | ptemplate | ) | `[inline, virtual]`

| Create a new particle from the specified template (or the default one if `ptemplate` is null). Reimplemented in osgParticle::ConnectedParticleSystem.

void osgParticle::ParticleSystem::destroyParticle | ( | int | i | ) | `[inline, virtual]`

| Destroy the i-th particle.

virtual void osgParticle::ParticleSystem::drawImplementation | ( | osg::State & | state | ) | const`[virtual]`

  | drawImplementation(State&) is a pure virtaul method for the actual implementation of OpenGL drawing calls, such as vertex arrays and primitives, that must be implemented in concrete subclasses of the Drawable base class, examples include osg::Geometry and osg::ShapeDrawable. drawImplementation(State&) is called from the draw(State&) method, with the draw method handling management of OpenGL display lists, and drawImplementation(State&) handling the actuall drawing itself. Parameters:
  state | The osg::State object that encapulates the current OpenGL state for the current graphics context.
Implements osg::Drawable. Reimplemented in osgParticle::ConnectedParticleSystem.

const osg::Vec3 & osgParticle::ParticleSystem::getAlignVectorX | ( |  | ) | const`[inline]`

| Get the X-axis alignment vector.

const osg::Vec3 & osgParticle::ParticleSystem::getAlignVectorY | ( |  | ) | const`[inline]`

| Get the Y-axis alignment vector.

const osg::BoundingBox & osgParticle::ParticleSystem::getDefaultBoundingBox | ( |  | ) | const`[inline]`

| Get the default bounding box.

const Particle & osgParticle::ParticleSystem::getDefaultParticleTemplate | ( |  | ) | const`[inline]`

| Get a const reference to the default particle template.

Particle & osgParticle::ParticleSystem::getDefaultParticleTemplate | ( |  | ) | `[inline]`

| Get a reference to the default particle template.

bool osgParticle::ParticleSystem::getDoublePassRendering | ( |  | ) | const`[inline]`

| Get the double pass rendering flag.

bool osgParticle::ParticleSystem::getFreezeOnCull | ( |  | ) | const`[inline]`

| Get whether the particle system can freeze when culled.

int osgParticle::ParticleSystem::getLastFrameNumber | ( |  | ) | const`[inline]`

| Get the last frame number.

int osgParticle::ParticleSystem::getLevelOfDetail | ( |  | ) | const`[inline]`

| (EXPERIMENTAL) Get the level of detail.

const Particle * osgParticle::ParticleSystem::getParticle | ( | int | i | ) | const`[inline]`

| Get a const pointer to the i-th particle.

Particle * osgParticle::ParticleSystem::getParticle | ( | int | i | ) | `[inline]`

| Get a pointer to the i-th particle.

ParticleSystem::Alignment osgParticle::ParticleSystem::getParticleAlignment | ( |  | ) | const`[inline]`

| Get the alignment type of particles.

bool osgParticle::ParticleSystem::isFrozen | ( |  | ) | const`[inline]`

| Return true if the particle system is frozen.

osgParticle::ParticleSystem::META_Object | ( | osgParticle | ,
|  | ParticleSystem |
| ) |

int osgParticle::ParticleSystem::numDeadParticles | ( |  | ) | const`[inline]`

| Get the number of dead particles.

int osgParticle::ParticleSystem::numParticles | ( |  | ) | const`[inline]`

| Get the number of allocated particles (alive + dead).

ParticleSystem& osgParticle::ParticleSystem::operator= | ( | const ParticleSystem & |  | ) | `[inline, protected]`

virtual void osgParticle::ParticleSystem::reuseParticle | ( | int | i | ) | `[inline, virtual]`

| Reuse the i-th particle. Reimplemented in osgParticle::ConnectedParticleSystem.

void osgParticle::ParticleSystem::setAlignVectors | ( | const osg::Vec3 & | X,
|  | const osg::Vec3 & | Y
| ) | `[inline]`

| Set the alignment vectors.

void osgParticle::ParticleSystem::setAlignVectorX | ( | const osg::Vec3 & | v | ) | `[inline]`

| Set the X-axis alignment vector.

void osgParticle::ParticleSystem::setAlignVectorY | ( | const osg::Vec3 & | v | ) | `[inline]`

| Set the Y-axis alignment vector.

void osgParticle::ParticleSystem::setDefaultAttributes | ( | const std::string & | texturefile = "",
|  | bool | emissive_particles = true,
|  | bool | lighting = false,
|  | int | texture_unit = 0
| ) |

| A useful method to set the most common `StateAttribute`'s in one call. If `texturefile` is empty, then texturing is turned off.

void osgParticle::ParticleSystem::setDefaultBoundingBox | ( | const osg::BoundingBox & | bbox | ) | `[inline]`

| Set the default bounding box. The default bounding box is used when a real bounding box cannot be computed, for example because no particles has been updated yet.

void osgParticle::ParticleSystem::setDefaultParticleTemplate | ( | const Particle & | p | ) | `[inline]`

| Set the default particle template (particle is copied).

void osgParticle::ParticleSystem::setDoublePassRendering | ( | bool | v | ) | `[inline]`

| Set the double pass rendering flag. Double pass rendering avoids overdraw problems between particle systems and other opaque objects. If you can render all the particle systems after the opaque objects, then double pass is not necessary and can be turned off (best choice). If you set the default attributes with setDefaultAttributes, then the particle system will fall into a transparent bin.

void osgParticle::ParticleSystem::setFreezeOnCull | ( | bool | v | ) | `[inline]`

| Set whether the particle system can freeze when culled (default is true).

void osgParticle::ParticleSystem::setFrozen | ( | bool | v | ) | `[inline]`

| Set or reset the frozen state. When the particle system is frozen, emitters and programs won't do anything on it.

void osgParticle::ParticleSystem::setLevelOfDetail | ( | int | v | ) | `[inline]`

| (EXPERIMENTAL) Set the level of detail. The total number of particles is divided by the detail value to get the actual number of particles to be drawn. This value must be greater than zero.

void osgParticle::ParticleSystem::setParticleAlignment | ( | Alignment | a | ) | `[inline]`

| Set the alignment type of particles.

void osgParticle::ParticleSystem::single_pass_render | ( | osg::State & | state,
|  | const osg::Matrix & | modelview
| ) | const`[protected]`

virtual void osgParticle::ParticleSystem::update | ( | double | dt | ) | `[virtual]`

| Update the particles. Don't call this directly, use a `ParticleSystemUpdater` instead.

void osgParticle::ParticleSystem::update_bounds | ( | const osg::Vec3 & | p,
|  | float | r
| ) | `[inline, protected]`

## Member Data Documentation

osg::Vec3 osgParticle::ParticleSystem::_align_X_axis`[protected]`

osg::Vec3 osgParticle::ParticleSystem::_align_Y_axis`[protected]`

Alignment osgParticle::ParticleSystem::_alignment`[protected]`

osg::Vec3 osgParticle::ParticleSystem::_bmax`[protected]`

osg::Vec3 osgParticle::ParticleSystem::_bmin`[protected]`

bool osgParticle::ParticleSystem::_bounds_computed`[protected]`

Death_stack osgParticle::ParticleSystem::_deadparts`[protected]`

osg::BoundingBox osgParticle::ParticleSystem::_def_bbox`[protected]`

Particle osgParticle::ParticleSystem::_def_ptemp`[protected]`

int osgParticle::ParticleSystem::_detail`[protected]`

bool osgParticle::ParticleSystem::_doublepass`[protected]`

int osgParticle::ParticleSystem::_draw_count`[mutable, protected]`

bool osgParticle::ParticleSystem::_freeze_on_cull`[protected]`

bool osgParticle::ParticleSystem::_frozen`[protected]`

int osgParticle::ParticleSystem::_last_frame`[mutable, protected]`

Particle_vector osgParticle::ParticleSystem::_particles`[protected]`

bool osgParticle::ParticleSystem::_reset_bounds_flag`[protected]`

The documentation for this class was generated from the following file:

- ParticleSystem