openscenegraph
|
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) |
ParticleScaleReferenceFrame | getParticleScaleReferenceFrame () const |
const osg::BoundingBox & | getDefaultBoundingBox () const |
Get the default bounding box. | |
void | setDefaultBoundingBox (const osg::BoundingBox &bbox) |
bool | getUseVertexArray () const |
Return true if we use vertex arrays for rendering particles. | |
void | setUseVertexArray (bool v) |
bool | getUseShaders () const |
Return true if shaders are required. | |
void | setUseShaders (bool v) |
bool | getDoublePassRendering () const |
Get the double pass rendering flag. | |
void | setDoublePassRendering (bool v) |
bool | getFrozen () const |
Return true if the particle system is frozen. | |
bool | isFrozen () const |
void | setFrozen (bool v) |
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. | |
unsigned int | getLastFrameNumber () const |
Get the last frame number. | |
double & | getDeltaTime (double currentTime) |
Get the unique delta time for emitters and updaters to use. | |
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) |
void | setDefaultAttributesUsingShaders (const std::string &texturefile="", bool emissive_particles=true, int texture_unit=0) |
int | getLevelOfDetail () const |
(EXPERIMENTAL) Get the level of detail. | |
void | setLevelOfDetail (int v) |
SortMode | getSortMode () const |
Get the sort mode. | |
void | setSortMode (SortMode mode) |
double | getVisibilityDistance () const |
Get the visibility distance. | |
void | setVisibilityDistance (double 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 |
virtual osg::BoundingBox | computeBound () const |
ReadWriterMutex * | getReadWriteMutex () const |
![]() | |
Drawable () | |
Drawable (const Drawable &drawable, const CopyOp ©op=CopyOp::SHALLOW_COPY) | |
virtual bool | isSameKindAs (const Object *obj) const |
virtual const char * | libraryName () const |
virtual const char * | className () const |
virtual Geometry * | asGeometry () |
virtual const Geometry * | asGeometry () const |
virtual void | computeDataVariance () |
const ParentList & | getParents () const |
ParentList | getParents () |
Node * | getParent (unsigned int i) |
const Node * | getParent (unsigned int i) const |
unsigned int | getNumParents () const |
MatrixList | getWorldMatrices (const osg::Node *haltTraversalAtNode=0) const |
void | setStateSet (StateSet *stateset) |
StateSet * | getStateSet () |
const StateSet * | getStateSet () const |
StateSet * | getOrCreateStateSet () |
void | setInitialBound (const osg::BoundingBox &bbox) |
const BoundingBox & | getInitialBound () const |
void | dirtyBound () |
const BoundingBox & | getBound () const |
void | setComputeBoundingBoxCallback (ComputeBoundingBoxCallback *callback) |
ComputeBoundingBoxCallback * | getComputeBoundingBoxCallback () |
const ComputeBoundingBoxCallback * | getComputeBoundingBoxCallback () const |
void | setShape (Shape *shape) |
Shape * | getShape () |
const Shape * | getShape () const |
void | setSupportsDisplayList (bool flag) |
bool | getSupportsDisplayList () const |
void | setUseDisplayList (bool flag) |
bool | getUseDisplayList () const |
GLuint & | getDisplayList (unsigned int contextID) const |
virtual void | setUseVertexBufferObjects (bool flag) |
bool | getUseVertexBufferObjects () const |
virtual void | dirtyDisplayList () |
virtual unsigned int | getGLObjectSizeHint () const |
void | draw (RenderInfo &renderInfo) const |
virtual void | compileGLObjects (RenderInfo &renderInfo) const |
virtual void | setThreadSafeRefUnref (bool threadSafe) |
virtual void | resizeGLObjectBuffers (unsigned int maxSize) |
virtual void | releaseGLObjects (State *state=0) const |
virtual void | setUpdateCallback (UpdateCallback *ac) |
UpdateCallback * | getUpdateCallback () |
const UpdateCallback * | getUpdateCallback () const |
bool | requiresUpdateTraversal () const |
virtual void | setEventCallback (EventCallback *ac) |
EventCallback * | getEventCallback () |
const EventCallback * | getEventCallback () const |
bool | requiresEventTraversal () const |
virtual void | setCullCallback (CullCallback *cc) |
CullCallback * | getCullCallback () |
const CullCallback * | getCullCallback () const |
virtual void | setDrawCallback (DrawCallback *dc) |
DrawCallback * | getDrawCallback () |
const DrawCallback * | getDrawCallback () const |
virtual bool | supports (const AttributeFunctor &) const |
virtual void | accept (AttributeFunctor &) |
virtual bool | supports (const ConstAttributeFunctor &) const |
virtual void | accept (ConstAttributeFunctor &) const |
virtual bool | supports (const PrimitiveFunctor &) const |
virtual void | accept (PrimitiveFunctor &) const |
virtual bool | supports (const PrimitiveIndexFunctor &) const |
virtual void | accept (PrimitiveIndexFunctor &) const |
![]() | |
Object () | |
Object (bool threadSafeRefUnref) | |
Object (const Object &, const CopyOp ©op=CopyOp::SHALLOW_COPY) | |
virtual Object * | cloneType () const =0 |
virtual Object * | clone (const CopyOp &) const =0 |
virtual void | setName (const std::string &name) |
void | setName (const char *name) |
const std::string & | getName () const |
void | setDataVariance (DataVariance dv) |
DataVariance | getDataVariance () const |
void | setUserDataContainer (osg::UserDataContainer *udc) |
osg::UserDataContainer * | getUserDataContainer () |
const osg::UserDataContainer * | getUserDataContainer () const |
osg::UserDataContainer * | getOrCreateUserDataContainer () |
virtual void | setUserData (Referenced *obj) |
virtual Referenced * | getUserData () |
virtual const Referenced * | getUserData () const |
template<typename T > | |
bool | getUserValue (const std::string &name, T &value) const |
template<typename T > | |
void | setUserValue (const std::string &name, const T &value) |
![]() | |
Referenced () | |
Referenced (bool threadSafeRefUnref) | |
Referenced (const Referenced &) | |
Referenced & | operator= (const Referenced &) |
bool | getThreadSafeRefUnref () const |
OpenThreads::Mutex * | getRefMutex () const |
int | ref () const |
int | unref () const |
int | unref_nodelete () const |
int | referenceCount () const |
ObserverSet * | getObserverSet () const |
ObserverSet * | getOrCreateObserverSet () const |
void | addObserver (Observer *observer) const |
void | removeObserver (Observer *observer) const |
Protected Types | |
typedef std::vector< Particle > | Particle_vector |
typedef std::stack< Particle * > | Death_stack |
![]() | |
typedef osg::buffered_value < GLuint > | GLObjectList |
Additional Inherited Members | |
![]() | |
static GLuint | generateDisplayList (unsigned int contextID, unsigned int sizeHint=0) |
static void | setMinimumNumberOfDisplayListsToRetainInCache (unsigned int minimum) |
static unsigned int | getMinimumNumberOfDisplayListsToRetainInCache () |
static void | deleteDisplayList (unsigned int contextID, GLuint globj, unsigned int sizeHint=0) |
static void | flushAllDeletedDisplayLists (unsigned int contextID) |
static void | discardAllDeletedDisplayLists (unsigned int contextID) |
static void | flushDeletedDisplayLists (unsigned int contextID, double &availableTime) |
static Extensions * | getExtensions (unsigned int contextID, bool createIfNotInitalized) |
static void | setExtensions (unsigned int contextID, Extensions *extensions) |
![]() | |
static unsigned int | s_numberDrawablesReusedLastInLastFrame |
static unsigned int | s_numberNewDrawablesInLastFrame |
static unsigned int | s_numberDeletedDrawablesInLastFrame |
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).
|
protected |
|
protected |
osgParticle::ParticleSystem::ParticleSystem | ( | ) |
osgParticle::ParticleSystem::ParticleSystem | ( | const ParticleSystem & | copy, |
const osg::CopyOp & | copyop = osg::CopyOp::SHALLOW_COPY |
||
) |
|
protectedvirtual |
|
inline |
Get whether all particles are dead.
|
virtual |
Compute the bounding box around Drawables's geometry.
Reimplemented from osg::Drawable.
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.
|
inlinevirtual |
Destroy the i-th particle.
References _particles.
|
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.
|
inline |
Get the X-axis alignment vector.
References _align_X_axis.
|
inline |
Get the Y-axis alignment vector.
References _align_Y_axis.
|
inline |
Get the default bounding box.
References _def_bbox.
|
inline |
Get a reference to the default particle template.
References _def_ptemp.
|
inline |
Get a const reference to the default particle template.
References _def_ptemp.
|
inline |
|
inline |
Get the double pass rendering flag.
References _doublepass.
|
inline |
Get whether the particle system can freeze when culled.
References _freeze_on_cull.
|
inline |
Return true if the particle system is frozen.
|
inline |
Get the last frame number.
References _last_frame.
|
inline |
(EXPERIMENTAL) Get the level of detail.
References _detail.
|
inline |
Get a pointer to the i-th particle.
References _particles.
Referenced by osgParticle::Operator::operateParticles().
|
inline |
Get a const pointer to the i-th particle.
References _particles.
|
inline |
Get the alignment type of particles.
References _alignment.
|
inline |
Get whether the particles should be scaled relative to world coordaintes or local coordinates.
|
inline |
|
inline |
Get the sort mode.
References _sortMode.
|
inline |
Return true if shaders are required.
|
inline |
Return true if we use vertex arrays for rendering particles.
|
inline |
Get the visibility distance.
References _visibilityDistance.
|
inline |
References _frozen.
osgParticle::ParticleSystem::META_Object | ( | osgParticle | , |
ParticleSystem | |||
) |
|
inline |
Get the number of dead particles.
References _deadparts.
|
inline |
Get the number of allocated particles (alive + dead).
References _particles.
Referenced by osgParticle::Operator::operateParticles().
|
inlineprotected |
|
protected |
|
inlinevirtual |
Reuse the i-th particle.
Reimplemented in osgParticle::ConnectedParticleSystem.
|
inline |
Set the alignment vectors.
References _align_X_axis, and _align_Y_axis.
|
inline |
Set the X-axis alignment vector.
References _align_X_axis.
|
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.
|
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.
|
inline |
Set the default particle template (particle is copied).
References _def_ptemp.
|
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.
|
inline |
Set whether the particle system can freeze when culled (default is true)
References _freeze_on_cull.
|
inline |
Set or reset the frozen state. When the particle system is frozen, emitters and programs won't do anything on it.
References _frozen.
|
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.
|
inline |
Set the alignment type of particles.
References _alignment.
|
inline |
Set whether the particles should be scaled relative to world coordaintes or local coordinates.
|
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.
|
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.
|
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()
.
|
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 _dirty_uniforms, _useShaders, and _visibilityDistance.
|
protected |
|
virtual |
Update the particles. Don't call this directly, use a ParticleSystemUpdater
instead.
|
inlineprotected |
References _bmax, _bmin, _bounds_computed, _reset_bounds_flag, osg::Vec3f::x(), osg::Vec3f::y(), and osg::Vec3f::z().
|
protected |
Referenced by getAlignVectorX(), setAlignVectors(), and setAlignVectorX().
|
protected |
Referenced by getAlignVectorY(), setAlignVectors(), and setAlignVectorY().
|
protected |
Referenced by getParticleAlignment(), and setParticleAlignment().
|
protected |
Referenced by update_bounds().
|
protected |
Referenced by update_bounds().
|
protected |
Referenced by update_bounds().
|
protected |
Referenced by createParticle(), and numDeadParticles().
|
protected |
Referenced by getDefaultBoundingBox(), and setDefaultBoundingBox().
|
protected |
Referenced by createParticle(), getDefaultParticleTemplate(), and setDefaultParticleTemplate().
|
protected |
Referenced by getLevelOfDetail(), and setLevelOfDetail().
|
mutableprotected |
Referenced by getDeltaTime().
|
protected |
Referenced by setVisibilityDistance().
|
protected |
Referenced by getDoublePassRendering(), and setDoublePassRendering().
|
mutableprotected |
|
protected |
Referenced by getDeltaTime().
|
protected |
Referenced by getFreezeOnCull(), and setFreezeOnCull().
|
protected |
Referenced by isFrozen(), and setFrozen().
|
mutableprotected |
Referenced by getLastFrameNumber().
|
protected |
Referenced by createParticle(), destroyParticle(), getParticle(), and numParticles().
|
protected |
|
mutableprotected |
|
protected |
Referenced by update_bounds().
|
protected |
Referenced by getSortMode(), and setSortMode().
|
protected |
Referenced by getDeltaTime().
|
protected |
Referenced by setVisibilityDistance().
|
protected |
|
protected |
Referenced by getVisibilityDistance(), and setVisibilityDistance().