OpenSceneGraph 2.8.3
|
The heart of this class library; its purpose is to hold a set of particles and manage particle creation, update, rendering and destruction. More...
Public Types | |
enum | Alignment { BILLBOARD, FIXED } |
enum | ParticleScaleReferenceFrame { LOCAL_COORDINATES, WORLD_COORDINATES } |
typedef OpenThreads::Mutex | ReadWriterMutex |
typedef OpenThreads::ScopedLock < OpenThreads::Mutex > | ScopedReadLock |
typedef OpenThreads::ScopedLock < OpenThreads::Mutex > | ScopedWriteLock |
Public Member Functions | |
ParticleSystem () | |
ParticleSystem (const ParticleSystem ©, const osg::CopyOp ©op=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. | |
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::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::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. | |
ReadWriterMutex * | getReadWriteMutex () const |
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 |
ParticleScaleReferenceFrame | _particleScaleReferenceFrame |
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 |
ReadWriterMutex | _readWriteMutex |
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).
typedef std::stack<Particle*> osgParticle::ParticleSystem::Death_stack [protected] |
typedef std::vector<Particle> osgParticle::ParticleSystem::Particle_vector [protected] |
typedef OpenThreads::Mutex osgParticle::ParticleSystem::ReadWriterMutex |
typedef OpenThreads::ScopedLock<OpenThreads::Mutex> osgParticle::ParticleSystem::ScopedReadLock |
typedef OpenThreads::ScopedLock<OpenThreads::Mutex> osgParticle::ParticleSystem::ScopedWriteLock |
osgParticle::ParticleSystem::ParticleSystem | ( | ) |
osgParticle::ParticleSystem::ParticleSystem | ( | const ParticleSystem & | copy, |
const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY |
||
) |
virtual osgParticle::ParticleSystem::~ParticleSystem | ( | ) | [protected, virtual] |
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.
renderInfo | The 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.
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.
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.
const Particle * osgParticle::ParticleSystem::getParticle | ( | int | i | ) | const [inline] |
Get a const pointer to the i-th particle.
References _particles.
Particle * osgParticle::ParticleSystem::getParticle | ( | int | i | ) | [inline] |
Get a 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] |
bool osgParticle::ParticleSystem::isFrozen | ( | ) | const [inline] |
Return true if the particle system is frozen.
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.
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.
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::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::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] |
References _bmax, _bmin, _bounds_computed, _reset_bounds_flag, osg::Vec3f::x(), osg::Vec3f::y(), and osg::Vec3f::z().
osg::Vec3 osgParticle::ParticleSystem::_align_X_axis [protected] |
Referenced by getAlignVectorX(), setAlignVectors(), and setAlignVectorX().
osg::Vec3 osgParticle::ParticleSystem::_align_Y_axis [protected] |
Referenced by getAlignVectorY(), setAlignVectors(), and setAlignVectorY().
Alignment osgParticle::ParticleSystem::_alignment [protected] |
Referenced by getParticleAlignment(), and setParticleAlignment().
osg::Vec3 osgParticle::ParticleSystem::_bmax [protected] |
Referenced by update_bounds().
osg::Vec3 osgParticle::ParticleSystem::_bmin [protected] |
Referenced by update_bounds().
bool osgParticle::ParticleSystem::_bounds_computed [protected] |
Referenced by update_bounds().
Death_stack osgParticle::ParticleSystem::_deadparts [protected] |
Referenced by createParticle(), and numDeadParticles().
Referenced by getDefaultBoundingBox(), and setDefaultBoundingBox().
Particle osgParticle::ParticleSystem::_def_ptemp [protected] |
Referenced by createParticle(), getDefaultParticleTemplate(), and setDefaultParticleTemplate().
int osgParticle::ParticleSystem::_detail [protected] |
Referenced by getLevelOfDetail(), and setLevelOfDetail().
bool osgParticle::ParticleSystem::_doublepass [protected] |
Referenced by getDoublePassRendering(), and setDoublePassRendering().
int osgParticle::ParticleSystem::_draw_count [mutable, protected] |
bool osgParticle::ParticleSystem::_freeze_on_cull [protected] |
Referenced by getFreezeOnCull(), and setFreezeOnCull().
bool osgParticle::ParticleSystem::_frozen [protected] |
Referenced by isFrozen(), and setFrozen().
int osgParticle::ParticleSystem::_last_frame [mutable, protected] |
Referenced by getLastFrameNumber().
Referenced by createParticle(), destroyParticle(), getParticle(), and numParticles().
ReadWriterMutex osgParticle::ParticleSystem::_readWriteMutex [mutable, protected] |
bool osgParticle::ParticleSystem::_reset_bounds_flag [protected] |
Referenced by update_bounds().
![]() | Generated at Tue Mar 22 2011 13:20:28 for the OpenSceneGraph by doxygen 1.7.3. |