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. More... | |
void | setParticleAlignment (Alignment a) |
Set the alignment type of particles. More... | |
const osg::Vec3 & | getAlignVectorX () const |
Get the X-axis alignment vector. More... | |
void | setAlignVectorX (const osg::Vec3 &v) |
Set the X-axis alignment vector. More... | |
const osg::Vec3 & | getAlignVectorY () const |
Get the Y-axis alignment vector. More... | |
void | setAlignVectorY (const osg::Vec3 &v) |
Set the Y-axis alignment vector. More... | |
void | setAlignVectors (const osg::Vec3 &X, const osg::Vec3 &Y) |
Set the alignment vectors. More... | |
void | setParticleScaleReferenceFrame (ParticleScaleReferenceFrame rf) |
ParticleScaleReferenceFrame | getParticleScaleReferenceFrame () const |
const osg::BoundingBox & | getDefaultBoundingBox () const |
Get the default bounding box. More... | |
void | setDefaultBoundingBox (const osg::BoundingBox &bbox) |
bool | getUseVertexArray () const |
Return true if we use vertex arrays for rendering particles. More... | |
void | setUseVertexArray (bool v) |
bool | getUseShaders () const |
Return true if shaders are required. More... | |
void | setUseShaders (bool v) |
bool | getDoublePassRendering () const |
Get the double pass rendering flag. More... | |
void | setDoublePassRendering (bool v) |
bool | getFrozen () const |
Return true if the particle system is frozen. More... | |
bool | isFrozen () const |
void | setFrozen (bool v) |
int | numParticles () const |
Get the number of allocated particles (alive + dead). More... | |
int | numDeadParticles () const |
Get the number of dead particles. More... | |
bool | areAllParticlesDead () const |
Get whether all particles are dead. More... | |
Particle * | getParticle (int i) |
Get a pointer to the i-th particle. More... | |
const Particle * | getParticle (int i) const |
Get a const pointer to the i-th particle. More... | |
virtual Particle * | createParticle (const Particle *ptemplate) |
Create a new particle from the specified template (or the default one if ptemplate is null). More... | |
virtual void | destroyParticle (int i) |
Destroy the i-th particle. More... | |
virtual void | reuseParticle (int i) |
Reuse the i-th particle. More... | |
unsigned int | getLastFrameNumber () const |
Get the last frame number. More... | |
double & | getDeltaTime (double currentTime) |
Get the unique delta time for emitters and updaters to use. More... | |
Particle & | getDefaultParticleTemplate () |
Get a reference to the default particle template. More... | |
const Particle & | getDefaultParticleTemplate () const |
Get a const reference to the default particle template. More... | |
void | setDefaultParticleTemplate (const Particle &p) |
Set the default particle template (particle is copied). More... | |
bool | getFreezeOnCull () const |
Get whether the particle system can freeze when culled. More... | |
void | setFreezeOnCull (bool v) |
Set whether the particle system can freeze when culled (default is true) More... | |
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. More... | |
void | setLevelOfDetail (int v) |
SortMode | getSortMode () const |
Get the sort mode. More... | |
void | setSortMode (SortMode mode) |
double | getVisibilityDistance () const |
Get the visibility distance. More... | |
void | setVisibilityDistance (double distance) |
virtual void | update (double dt, osg::NodeVisitor &nv) |
Update the particles. Don't call this directly, use a ParticleSystemUpdater instead. More... | |
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) |
template<typename T > | |
BoolValueObject UCharValueObject UShortValueObject UIntValueObject DoubleValueObject Vec3fValueObject Vec2dValueObject Vec4dValueObject PlaneValueObject MatrixdValueObject bool | getUserValue (const std::string &name, T &value) const |
![]() | |
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 |
Protected Member Functions | |
virtual | ~ParticleSystem () |
ParticleSystem & | operator= (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 |
![]() | |
Drawable & | operator= (const Drawable &) |
virtual | ~Drawable () |
void | setBound (const BoundingBox &bb) const |
void | addParent (osg::Node *node) |
void | removeParent (osg::Node *node) |
void | setNumChildrenRequiringUpdateTraversal (unsigned int num) |
unsigned int | getNumChildrenRequiringUpdateTraversal () const |
void | setNumChildrenRequiringEventTraversal (unsigned int num) |
unsigned int | getNumChildrenRequiringEventTraversal () const |
![]() | |
virtual | ~Object () |
![]() | |
virtual | ~Referenced () |
void | signalObserversAndDelete (bool signalDelete, bool doDelete) const |
void | deleteUsingDeleteHandler () const |
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 OpenThreads::Mutex * | getGlobalReferencedMutex () |
static void | setThreadSafeReferenceCounting (bool enableThreadSafeReferenceCounting) |
static bool | getThreadSafeReferenceCounting () |
static void | setDeleteHandler (DeleteHandler *handler) |
static DeleteHandler * | getDeleteHandler () |
![]() | |
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.
|
inlinevirtual |
Destroy the i-th particle.
|
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.
|
inline |
Get the Y-axis alignment vector.
|
inline |
Get the default bounding box.
|
inline |
Get a reference to the default particle template.
|
inline |
Get a const reference to the default particle template.
|
inline |
Get the unique delta time for emitters and updaters to use.
|
inline |
Get the double pass rendering flag.
|
inline |
Get whether the particle system can freeze when culled.
|
inline |
Return true if the particle system is frozen.
|
inline |
Get the last frame number.
|
inline |
(EXPERIMENTAL) Get the level of detail.
|
inline |
Get a pointer to the i-th particle.
|
inline |
Get a const pointer to the i-th particle.
|
inline |
Get the alignment type of particles.
|
inline |
Get whether the particles should be scaled relative to world coordaintes or local coordinates.
|
inline |
|
inline |
Get the sort mode.
|
inline |
Return true if shaders are required.
|
inline |
Return true if we use vertex arrays for rendering particles.
|
inline |
Get the visibility distance.
|
inline |
osgParticle::ParticleSystem::META_Object | ( | osgParticle | , |
ParticleSystem | |||
) |
|
inline |
Get the number of dead particles.
|
inline |
Get the number of allocated particles (alive + dead).
|
inlineprotected |
|
protected |
|
inlinevirtual |
Reuse the i-th particle.
Reimplemented in osgParticle::ConnectedParticleSystem.
|
inline |
Set the alignment vectors.
|
inline |
Set the X-axis alignment vector.
|
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::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.
|
inline |
Set the default particle template (particle is copied).
|
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.
|
inline |
Set whether the particle system can freeze when culled (default is true)
|
inline |
Set or reset the frozen state. When the particle system is frozen, emitters and programs won't do anything on it.
|
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.
|
inline |
Set the alignment type of particles.
|
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()
.
|
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.
|
protected |
|
virtual |
Update the particles. Don't call this directly, use a ParticleSystemUpdater
instead.
|
inlineprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
mutableprotected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |