OpenSceneGraph  3.0.1
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes
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:
Inheritance graph
[legend]

List of all members.

Public Types

enum  Alignment { BILLBOARD, FIXED }
enum  ParticleScaleReferenceFrame { LOCAL_COORDINATES, WORLD_COORDINATES }
enum  SortMode { NO_SORT, SORT_FRONT_TO_BACK, SORT_BACK_TO_FRONT }
typedef OpenThreads::Mutex ReadWriterMutex
typedef
OpenThreads::ScopedLock
< OpenThreads::Mutex > 
ScopedReadLock
typedef
OpenThreads::ScopedLock
< OpenThreads::Mutex > 
ScopedWriteLock

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::Vec3getAlignVectorX () const
 Get the X-axis alignment vector.
void setAlignVectorX (const osg::Vec3 &v)
 Set the X-axis alignment vector.
const osg::Vec3getAlignVectorY () 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.
void setParticleScaleReferenceFrame (ParticleScaleReferenceFrame rf)
 Set whether the particles should be scaled relative to world coordaintes or local coordinates.
ParticleScaleReferenceFrame getParticleScaleReferenceFrame () const
 Get whether the particles should be scaled relative to world coordaintes or local coordinates.
const osg::BoundingBoxgetDefaultBoundingBox () const
 Get the default bounding box.
void setDefaultBoundingBox (const osg::BoundingBox &bbox)
 Set the default bounding box.
bool getUseVertexArray () const
 Return true if we use vertex arrays for rendering particles.
void setUseVertexArray (bool v)
 Set to use vertex arrays for rendering particles.
bool getUseShaders () const
 Return true if shaders are required.
void setUseShaders (bool v)
 Set to use GLSL shaders for rendering particles.
bool getDoublePassRendering () const
 Get the double pass rendering flag.
void setDoublePassRendering (bool v)
 Set the double pass rendering flag.
bool getFrozen () const
 Return true if the particle system is frozen.
bool isFrozen () const
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.
ParticlegetParticle (int i)
 Get a pointer to the i-th particle.
const ParticlegetParticle (int i) const
 Get a const pointer to the i-th particle.
virtual ParticlecreateParticle (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.
unsigned int getLastFrameNumber () const
 Get the last frame number.
double & getDeltaTime (double currentTime)
 Get the unique delta time for emitters and updaters to use.
ParticlegetDefaultParticleTemplate ()
 Get a reference to the default particle template.
const ParticlegetDefaultParticleTemplate () 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.
void setDefaultAttributesUsingShaders (const std::string &texturefile="", bool emissive_particles=true, int texture_unit=0)
 A useful method to set the most common StateAttribute and use GLSL shaders to draw particles.
int getLevelOfDetail () const
 (EXPERIMENTAL) Get the level of detail.
void setLevelOfDetail (int v)
 (EXPERIMENTAL) Set the level of detail.
SortMode getSortMode () const
 Get the sort mode.
void setSortMode (SortMode mode)
 Set the sort mode.
double getVisibilityDistance () const
 Get the visibility distance.
void setVisibilityDistance (double distance)
 Set the visibility distance which allows the particles to be rendered only when depth is inside the distance.
virtual void update (double dt, osg::NodeVisitor &nv)
 Update the particles. Don't call this directly, use a ParticleSystemUpdater instead.
virtual void drawImplementation (osg::RenderInfo &renderInfo) const
 drawImplementation(RenderInfo&) is a pure virtual 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.
ReadWriterMutexgetReadWriteMutex () const

Protected Types

typedef std::vector< ParticleParticle_vector
typedef std::stack< Particle * > Death_stack

Protected Member Functions

virtual ~ParticleSystem ()
ParticleSystemoperator= (const ParticleSystem &)
void update_bounds (const osg::Vec3 &p, float r)
void single_pass_render (osg::RenderInfo &renderInfo, const osg::Matrix &modelview) const
void render_vertex_array (osg::RenderInfo &renderInfo) 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
ParticleScaleReferenceFrame _particleScaleReferenceFrame
bool _useVertexArray
bool _useShaders
bool _dirty_uniforms
bool _doublepass
bool _frozen
osg::Vec3 _bmin
osg::Vec3 _bmax
bool _reset_bounds_flag
bool _bounds_computed
Particle _def_ptemp
unsigned int _last_frame
bool _dirty_dt
bool _freeze_on_cull
double _t0
double _dt
int _detail
SortMode _sortMode
double _visibilityDistance
int _draw_count
ReadWriterMutex _readWriteMutex

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]
typedef OpenThreads::ScopedLock<OpenThreads::Mutex> osgParticle::ParticleSystem::ScopedReadLock
typedef OpenThreads::ScopedLock<OpenThreads::Mutex> osgParticle::ParticleSystem::ScopedWriteLock

Member Enumeration Documentation

Enumerator:
BILLBOARD 
FIXED 
Enumerator:
LOCAL_COORDINATES 
WORLD_COORDINATES 
Enumerator:
NO_SORT 
SORT_FRONT_TO_BACK 
SORT_BACK_TO_FRONT 

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.

References _deadparts, _def_ptemp, and _particles.

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

Destroy the i-th particle.

References _particles.

virtual void osgParticle::ParticleSystem::drawImplementation ( osg::RenderInfo renderInfo) const [virtual]

drawImplementation(RenderInfo&) is a pure virtual 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(RenderInfo&) is called from the draw(RenderInfo&) method, with the draw method handling management of OpenGL display lists, and drawImplementation(RenderInfo&) handling the actual drawing itself.

Parameters:
renderInfoThe osg::RenderInfo object that encapsulates the current rendering information including the osg::State 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.

References _align_X_axis.

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

Get the Y-axis alignment vector.

References _align_Y_axis.

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

Get the default bounding box.

References _def_bbox.

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

Get a reference to the default particle template.

References _def_ptemp.

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

Get a const reference to the default particle template.

References _def_ptemp.

double & osgParticle::ParticleSystem::getDeltaTime ( double  currentTime) [inline]

Get the unique delta time for emitters and updaters to use.

References _dirty_dt, _dt, and _t0.

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

Get the double pass rendering flag.

References _doublepass.

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

Get whether the particle system can freeze when culled.

References _freeze_on_cull.

bool osgParticle::ParticleSystem::getFrozen ( ) const [inline]

Return true if the particle system is frozen.

unsigned int osgParticle::ParticleSystem::getLastFrameNumber ( ) const [inline]

Get the last frame number.

References _last_frame.

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

(EXPERIMENTAL) Get the level of detail.

References _detail.

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

Get a pointer to the i-th particle.

References _particles.

Referenced by osgParticle::Operator::operateParticles().

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

Get a const pointer to the i-th particle.

References _particles.

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

Get the alignment type of particles.

References _alignment.

ParticleScaleReferenceFrame osgParticle::ParticleSystem::getParticleScaleReferenceFrame ( ) const [inline]

Get whether the particles should be scaled relative to world coordaintes or local coordinates.

ReadWriterMutex* osgParticle::ParticleSystem::getReadWriteMutex ( ) const [inline]
ParticleSystem::SortMode osgParticle::ParticleSystem::getSortMode ( ) const [inline]

Get the sort mode.

References _sortMode.

bool osgParticle::ParticleSystem::getUseShaders ( ) const [inline]

Return true if shaders are required.

bool osgParticle::ParticleSystem::getUseVertexArray ( ) const [inline]

Return true if we use vertex arrays for rendering particles.

double osgParticle::ParticleSystem::getVisibilityDistance ( ) const [inline]

Get the visibility distance.

References _visibilityDistance.

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

References _frozen.

osgParticle::ParticleSystem::META_Object ( osgParticle  ,
ParticleSystem   
)
int osgParticle::ParticleSystem::numDeadParticles ( ) const [inline]

Get the number of dead particles.

References _deadparts.

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

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

References _particles.

Referenced by osgParticle::Operator::operateParticles().

ParticleSystem& osgParticle::ParticleSystem::operator= ( const ParticleSystem ) [inline, protected]
void osgParticle::ParticleSystem::render_vertex_array ( osg::RenderInfo renderInfo) const [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.

References _align_X_axis, and _align_Y_axis.

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

Set the X-axis alignment vector.

References _align_X_axis.

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

Set the Y-axis alignment vector.

References _align_Y_axis.

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::setDefaultAttributesUsingShaders ( const std::string &  texturefile = "",
bool  emissive_particles = true,
int  texture_unit = 0 
)

A useful method to set the most common StateAttribute and use GLSL shaders to draw particles.

At present, when enabling shaders in the particle system, user-defined shapes will not be usable. 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.

References _def_bbox.

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

Set the default particle template (particle is copied).

References _def_ptemp.

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.

References _doublepass.

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

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

References _freeze_on_cull.

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.

References _frozen.

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.

References _detail.

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

Set the alignment type of particles.

References _alignment.

void osgParticle::ParticleSystem::setParticleScaleReferenceFrame ( ParticleScaleReferenceFrame  rf) [inline]

Set whether the particles should be scaled relative to world coordaintes or local coordinates.

void osgParticle::ParticleSystem::setSortMode ( SortMode  mode) [inline]

Set the sort mode.

It will force resorting the particle list by the Z direction of the view coordinates. This can be used for the purpose of transparent rendering or setVisibilityDistance().

References _sortMode.

void osgParticle::ParticleSystem::setUseShaders ( bool  v) [inline]

Set to use GLSL shaders for rendering particles.

Particles' parameters will be used as shader attribute arrays, and necessary variables, including the visibility distance, texture, etc, will be used and updated as uniforms.

void osgParticle::ParticleSystem::setUseVertexArray ( bool  v) [inline]

Set to use vertex arrays for rendering particles.

Lots of variables will be omitted: particles' shape, alive or not, visibility distance, and so on, so the rendering result is not as good as we wish (although it's fast than using glBegin/glEnd). We had better use this for GLSL shaders, in which particle parameters will be kept as uniforms. This method is called automatically by setDefaultAttributesUsingShaders().

void osgParticle::ParticleSystem::setVisibilityDistance ( double  distance) [inline]

Set the visibility distance which allows the particles to be rendered only when depth is inside the distance.

When using shaders, it can work well directly; otherwise the sort mode should also be set to pre-compute depth.

References _visibilityDistance, _useShaders, and _dirty_uniforms.

void osgParticle::ParticleSystem::single_pass_render ( osg::RenderInfo renderInfo,
const osg::Matrix modelview 
) const [protected]
virtual void osgParticle::ParticleSystem::update ( double  dt,
osg::NodeVisitor nv 
) [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

Referenced by update_bounds().

Referenced by update_bounds().

Referenced by update_bounds().

Referenced by numDeadParticles(), and createParticle().

bool osgParticle::ParticleSystem::_dirty_dt [mutable, protected]

Referenced by getDeltaTime().

Referenced by setVisibilityDistance().

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

Referenced by getDeltaTime().

Referenced by getFreezeOnCull(), and setFreezeOnCull().

Referenced by isFrozen(), and setFrozen().

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

Referenced by getLastFrameNumber().

Referenced by update_bounds().

Referenced by getSortMode(), and setSortMode().

Referenced by getDeltaTime().

Referenced by setVisibilityDistance().


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

osg logo
Generated at Mon Oct 3 2011 12:39:48 for the OpenSceneGraph by doxygen 1.7.5.