OpenSceneGraph 3.6.5
osgParticle::Particle Class Reference

Implementation of a particle. More...

#include <Particle>

Public Types

enum  { INVALID_INDEX = -1 }
enum  Shape {
  POINT , QUAD , QUAD_TRIANGLESTRIP , HEXAGON ,
  LINE , USER
}
 Shape of particles. More...

Public Member Functions

 Particle ()
Shape getShape () const
 Get the shape of the particle.
void setShape (Shape s)
 Set the shape of the particle.
bool isAlive () const
 Get whether the particle is still alive.
double getLifeTime () const
 Get the life time of the particle (in seconds).
double getAge () const
 Get the age of the particle (in seconds).
const rangefgetSizeRange () const
 Get the minimum and maximum values for polygon size.
const rangefgetAlphaRange () const
 Get the minimum and maximum values for alpha.
const rangev4getColorRange () const
 Get the minimum and maximum values for color.
const InterpolatorgetSizeInterpolator () const
 Get the interpolator for computing the size of polygons.
const InterpolatorgetAlphaInterpolator () const
 Get the interpolator for computing alpha values.
const InterpolatorgetColorInterpolator () const
 Get the interpolator for computing color values.
float getRadius () const
 Get the physical radius of the particle.
float getMass () const
 Get the mass of the particle.
float getMassInv () const
 Get 1 / getMass().
const osg::Vec3getPosition () const
 Get the position vector.
const osg::Vec3getVelocity () const
 Get the velocity vector.
const osg::Vec3getPreviousPosition () const
 Get the previous position (the position before last update).
const osg::Vec3getAngle () const
 Get the angle vector.
const osg::Vec3getAngularVelocity () const
 Get the rotational velocity vector.
const osg::Vec3getPreviousAngle () const
 Get the previous angle vector.
const osg::Vec4getCurrentColor () const
 Get the current color.
float getCurrentAlpha () const
 Get the current alpha.
float getSTexCoord () const
 Get the s texture coordinate of the bottom left of the particle.
float getTTexCoord () const
 Get the t texture coordinate of the bottom left of the particle.
float getSTexTile () const
 Get the texture coordinate width of the particle.
float getTTexTile () const
 Get the texture coordinate height of the particle.
int getTileS () const
 Get width of texture tile.
int getTileT () const
 Get height of texture tile.
int getNumTiles () const
 Get number of texture tiles.
void kill ()
 Kill the particle on next update NOTE: after calling this function, the isAlive() method will still return true until the particle is updated again.
void setLifeTime (double t)
 Set the life time of the particle.
void setSizeRange (const rangef &r)
 Set the minimum and maximum values for polygon size.
void setAlphaRange (const rangef &r)
 Set the minimum and maximum values for alpha.
void setColorRange (const rangev4 &r)
 Set the minimum and maximum values for color.
void setSizeInterpolator (Interpolator *ri)
 Set the interpolator for computing size values.
template<class T>
void setSizeInterpolator (const osg::ref_ptr< T > &ri)
void setAlphaInterpolator (Interpolator *ai)
 Set the interpolator for computing alpha values.
template<class T>
void setAlphaInterpolator (const osg::ref_ptr< T > &ri)
void setColorInterpolator (Interpolator *ci)
 Set the interpolator for computing color values.
template<class T>
void setColorInterpolator (const osg::ref_ptr< T > &ri)
void setRadius (float r)
 Set the physical radius of the particle.
void setMass (float m)
 Set the mass of the particle.
void setPosition (const osg::Vec3 &p)
 Set the position vector.
void setVelocity (const osg::Vec3 &v)
 Set the velocity vector.
void addVelocity (const osg::Vec3 &dv)
 Add a vector to the velocity vector.
void transformPositionVelocity (const osg::Matrix &xform)
 Transform position and velocity vectors by a matrix.
void transformPositionVelocity (const osg::Matrix &xform1, const osg::Matrix &xform2, float r)
 Transform position and velocity vectors by a combination of two matrices.
void setAngle (const osg::Vec3 &a)
 Set the angle vector.
void setAngularVelocity (const osg::Vec3 &v)
 Set the angular velocity vector.
void addAngularVelocity (const osg::Vec3 &dv)
 Add a vector to the angular velocity vector.
void transformAngleVelocity (const osg::Matrix &xform)
 Transform angle and angularVelocity vectors by a matrix.
bool update (double dt, bool onlyTimeStamp)
 Update the particle (don't call this method manually).
float getCurrentSize () const
 Get the current (interpolated) polygon size. Valid only after the first call to update().
void setTextureTileRange (int sTile, int tTile, int startTile, int endTile)
 Specify how the particle texture is tiled.
void setTextureTile (int sTile, int tTile, int end=-1)
 Same as above, range starts at 0 and ends at end.
int getStartTile () const
int getEndTile () const
void setPreviousParticle (int previous)
 Set the previous particle.
int getPreviousParticle () const
 Get the previous particle.
void setNextParticle (int next)
 Set the next particle.
int getNextParticle () const
 Get the const next particle.
void setDepth (double d)
 Set the depth of the particle.
double getDepth () const
 Get the depth of the particle.
bool operator< (const Particle &P) const
 Sorting operator.
void setUpTexCoordsAsPartOfConnectedParticleSystem (ParticleSystem *ps)
 Method for initializing a particles texture coords as part of a connected particle system.

Protected Attributes

Shape _shape
rangef _sr
rangef _ar
rangev4 _cr
osg::ref_ptr< Interpolator_si
osg::ref_ptr< Interpolator_ai
osg::ref_ptr< Interpolator_ci
bool _mustdie
double _lifeTime
float _radius
float _mass
float _massinv
osg::Vec3 _prev_pos
osg::Vec3 _position
osg::Vec3 _velocity
osg::Vec3 _prev_angle
osg::Vec3 _angle
osg::Vec3 _angul_arvel
double _t0
float _alive
float _current_size
float _current_alpha
osg::Vec3 _base_prop
osg::Vec4 _current_color
float _s_tile
float _t_tile
int _start_tile
int _end_tile
int _cur_tile
float _s_coord
float _t_coord
int _previousParticle
int _nextParticle
double _depth

Friends

class ParticleSystem

Detailed Description

Implementation of a particle.

Objects of this class are particles, they have some graphical properties and some physical properties. Particles are created by emitters and then placed into Particle Systems, where they live and get updated at each frame. Particles can either live forever (lifeTime < 0), or die after a specified time (lifeTime >= 0). For each property which is defined as a range of values, a "current" value will be evaluated at each frame by interpolating the min and max values so that curr_value = min when t == 0, and curr_value = max when t == lifeTime. You may customize the interpolator objects to achieve any kind of transition. If you want the particle to live forever, set its lifetime to any value <= 0; in that case, no interpolation is done to compute real-time properties, and only minimum values are used.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
INVALID_INDEX 

◆ Shape

Shape of particles.

NOTE: the LINE shape should be used in conjunction with FIXED alignment mode (see ParticleSystem).

Enumerator
POINT 
QUAD 
QUAD_TRIANGLESTRIP 
HEXAGON 
LINE 
USER 

Constructor & Destructor Documentation

◆ Particle()

Member Function Documentation

◆ addAngularVelocity()

void osgParticle::Particle::addAngularVelocity ( const osg::Vec3 & dv)
inline

Add a vector to the angular velocity vector.

References _angul_arvel.

Referenced by osgParticle::AngularAccelOperator::operate().

◆ addVelocity()

void osgParticle::Particle::addVelocity ( const osg::Vec3 & dv)
inline

◆ getAge()

double osgParticle::Particle::getAge ( ) const
inline

Get the age of the particle (in seconds).

References _t0.

Referenced by Particle().

◆ getAlphaInterpolator()

const Interpolator * osgParticle::Particle::getAlphaInterpolator ( ) const
inline

Get the interpolator for computing alpha values.

References _ai.

Referenced by Particle().

◆ getAlphaRange()

const rangef & osgParticle::Particle::getAlphaRange ( ) const
inline

Get the minimum and maximum values for alpha.

References _ar.

Referenced by Particle().

◆ getAngle()

const osg::Vec3 & osgParticle::Particle::getAngle ( ) const
inline

Get the angle vector.

References _angle.

Referenced by Particle().

◆ getAngularVelocity()

const osg::Vec3 & osgParticle::Particle::getAngularVelocity ( ) const
inline

Get the rotational velocity vector.

References _angul_arvel.

Referenced by osgParticle::SinkOperator::getValue(), osgParticle::AngularDampingOperator::operate(), and Particle().

◆ getColorInterpolator()

const Interpolator * osgParticle::Particle::getColorInterpolator ( ) const
inline

Get the interpolator for computing color values.

References _ci.

Referenced by Particle().

◆ getColorRange()

const rangev4 & osgParticle::Particle::getColorRange ( ) const
inline

Get the minimum and maximum values for color.

References _cr.

Referenced by Particle().

◆ getCurrentAlpha()

float osgParticle::Particle::getCurrentAlpha ( ) const
inline

Get the current alpha.

References _current_alpha.

◆ getCurrentColor()

const osg::Vec4 & osgParticle::Particle::getCurrentColor ( ) const
inline

Get the current color.

References _current_color.

◆ getCurrentSize()

float osgParticle::Particle::getCurrentSize ( ) const
inline

Get the current (interpolated) polygon size. Valid only after the first call to update().

References _current_size.

Referenced by update().

◆ getDepth()

double osgParticle::Particle::getDepth ( ) const
inline

Get the depth of the particle.

References _depth.

◆ getEndTile()

int osgParticle::Particle::getEndTile ( ) const
inline

References _end_tile.

Referenced by update().

◆ getLifeTime()

double osgParticle::Particle::getLifeTime ( ) const
inline

Get the life time of the particle (in seconds).

References _lifeTime.

Referenced by Particle().

◆ getMass()

float osgParticle::Particle::getMass ( ) const
inline

Get the mass of the particle.

For built-in operators to work correctly, remember that the mass is expressed in kg.

References _mass.

Referenced by Particle().

◆ getMassInv()

float osgParticle::Particle::getMassInv ( ) const
inline

Get 1 / getMass().

References _massinv.

Referenced by osgParticle::ForceOperator::operate(), and Particle().

◆ getNextParticle()

int osgParticle::Particle::getNextParticle ( ) const
inline

Get the const next particle.

References _nextParticle.

◆ getNumTiles()

int osgParticle::Particle::getNumTiles ( ) const
inline

Get number of texture tiles.

References _end_tile, and _start_tile.

◆ getPosition()

const osg::Vec3 & osgParticle::Particle::getPosition ( ) const
inline

◆ getPreviousAngle()

const osg::Vec3 & osgParticle::Particle::getPreviousAngle ( ) const
inline

Get the previous angle vector.

References _prev_angle.

Referenced by Particle().

◆ getPreviousParticle()

int osgParticle::Particle::getPreviousParticle ( ) const
inline

Get the previous particle.

References _previousParticle.

◆ getPreviousPosition()

const osg::Vec3 & osgParticle::Particle::getPreviousPosition ( ) const
inline

Get the previous position (the position before last update).

References _prev_pos.

Referenced by Particle().

◆ getRadius()

float osgParticle::Particle::getRadius ( ) const
inline

Get the physical radius of the particle.

For built-in operators to work correctly, lengths must be expressed in meters.

References _radius.

Referenced by Particle().

◆ getShape()

Particle::Shape osgParticle::Particle::getShape ( ) const
inline

Get the shape of the particle.

References _shape.

Referenced by Particle().

◆ getSizeInterpolator()

const Interpolator * osgParticle::Particle::getSizeInterpolator ( ) const
inline

Get the interpolator for computing the size of polygons.

References _si.

Referenced by Particle().

◆ getSizeRange()

const rangef & osgParticle::Particle::getSizeRange ( ) const
inline

Get the minimum and maximum values for polygon size.

References _sr.

Referenced by Particle().

◆ getStartTile()

int osgParticle::Particle::getStartTile ( ) const
inline

References _start_tile.

Referenced by update().

◆ getSTexCoord()

float osgParticle::Particle::getSTexCoord ( ) const
inline

Get the s texture coordinate of the bottom left of the particle.

References _s_coord.

◆ getSTexTile()

float osgParticle::Particle::getSTexTile ( ) const
inline

Get the texture coordinate width of the particle.

References _s_tile.

◆ getTileS()

int osgParticle::Particle::getTileS ( ) const
inline

Get width of texture tile.

References _s_tile.

◆ getTileT()

int osgParticle::Particle::getTileT ( ) const
inline

Get height of texture tile.

References _t_tile.

◆ getTTexCoord()

float osgParticle::Particle::getTTexCoord ( ) const
inline

Get the t texture coordinate of the bottom left of the particle.

References _t_coord.

◆ getTTexTile()

float osgParticle::Particle::getTTexTile ( ) const
inline

Get the texture coordinate height of the particle.

References _t_tile.

◆ getVelocity()

const osg::Vec3 & osgParticle::Particle::getVelocity ( ) const
inline

Get the velocity vector.

For built-in operators to work correctly, remember that velocity components are expressed in meters per second.

References _velocity.

Referenced by osgParticle::SinkOperator::getValue(), osgParticle::DampingOperator::operate(), and Particle().

◆ isAlive()

bool osgParticle::Particle::isAlive ( ) const
inline

Get whether the particle is still alive.

References _alive.

Referenced by osgParticle::Operator::operateParticles(), and Particle().

◆ kill()

void osgParticle::Particle::kill ( )
inline

Kill the particle on next update NOTE: after calling this function, the isAlive() method will still return true until the particle is updated again.

References _mustdie.

Referenced by osgParticle::SinkOperator::kill().

◆ operator<()

bool osgParticle::Particle::operator< ( const Particle & P) const
inline

Sorting operator.

References _depth, and Particle().

◆ setAlphaInterpolator() [1/2]

template<class T>
void osgParticle::Particle::setAlphaInterpolator ( const osg::ref_ptr< T > & ri)
inline

◆ setAlphaInterpolator() [2/2]

void osgParticle::Particle::setAlphaInterpolator ( Interpolator * ai)
inline

Set the interpolator for computing alpha values.

References _ai.

◆ setAlphaRange()

void osgParticle::Particle::setAlphaRange ( const rangef & r)
inline

Set the minimum and maximum values for alpha.

References _ar.

◆ setAngle()

void osgParticle::Particle::setAngle ( const osg::Vec3 & a)
inline

Set the angle vector.

References _angle.

◆ setAngularVelocity()

void osgParticle::Particle::setAngularVelocity ( const osg::Vec3 & v)
inline

Set the angular velocity vector.

Components x, y and z are angles of rotation around the respective axis (in radians).

References _angul_arvel.

Referenced by osgParticle::AngularDampingOperator::operate(), and osgParticle::RadialShooter::shoot().

◆ setColorInterpolator() [1/2]

template<class T>
void osgParticle::Particle::setColorInterpolator ( const osg::ref_ptr< T > & ri)
inline

◆ setColorInterpolator() [2/2]

void osgParticle::Particle::setColorInterpolator ( Interpolator * ci)
inline

Set the interpolator for computing color values.

References _ci.

◆ setColorRange()

void osgParticle::Particle::setColorRange ( const rangev4 & r)
inline

Set the minimum and maximum values for color.

References _cr.

◆ setDepth()

void osgParticle::Particle::setDepth ( double d)
inline

Set the depth of the particle.

References _depth.

◆ setLifeTime()

void osgParticle::Particle::setLifeTime ( double t)
inline

Set the life time of the particle.

References _lifeTime.

◆ setMass()

void osgParticle::Particle::setMass ( float m)
inline

Set the mass of the particle.

For built-in operators to work correctly, remember that the mass is expressed in kg.

References _mass, and _massinv.

◆ setNextParticle()

void osgParticle::Particle::setNextParticle ( int next)
inline

Set the next particle.

References _nextParticle.

◆ setPosition()

void osgParticle::Particle::setPosition ( const osg::Vec3 & p)
inline

◆ setPreviousParticle()

void osgParticle::Particle::setPreviousParticle ( int previous)
inline

Set the previous particle.

References _previousParticle.

◆ setRadius()

void osgParticle::Particle::setRadius ( float r)
inline

Set the physical radius of the particle.

For built-in operators to work correctly, lengths must be expressed in meters.

References _radius.

◆ setShape()

void osgParticle::Particle::setShape ( Shape s)
inline

Set the shape of the particle.

References _shape.

Referenced by Particle().

◆ setSizeInterpolator() [1/2]

template<class T>
void osgParticle::Particle::setSizeInterpolator ( const osg::ref_ptr< T > & ri)
inline

◆ setSizeInterpolator() [2/2]

void osgParticle::Particle::setSizeInterpolator ( Interpolator * ri)
inline

Set the interpolator for computing size values.

References _si.

◆ setSizeRange()

void osgParticle::Particle::setSizeRange ( const rangef & r)
inline

Set the minimum and maximum values for polygon size.

References _sr.

◆ setTextureTile()

void osgParticle::Particle::setTextureTile ( int sTile,
int tTile,
int end = -1 )
inline

Same as above, range starts at 0 and ends at end.

References setTextureTileRange().

Referenced by update().

◆ setTextureTileRange()

void osgParticle::Particle::setTextureTileRange ( int sTile,
int tTile,
int startTile,
int endTile )
inline

Specify how the particle texture is tiled.

All tiles in the given range are sequentially displayed during the lifetime of the particle. When no range is given, all tiles are displayed during the lifetime.

References _end_tile, _s_tile, _start_tile, and _t_tile.

Referenced by setTextureTile(), and update().

◆ setUpTexCoordsAsPartOfConnectedParticleSystem()

void osgParticle::Particle::setUpTexCoordsAsPartOfConnectedParticleSystem ( ParticleSystem * ps)

Method for initializing a particles texture coords as part of a connected particle system.

References ParticleSystem.

◆ setVelocity()

void osgParticle::Particle::setVelocity ( const osg::Vec3 & v)
inline

Set the velocity vector.

For built-in operators to work correctly, remember that velocity components are expressed in meters per second.

References _velocity.

Referenced by osgParticle::DampingOperator::operate(), and osgParticle::RadialShooter::shoot().

◆ transformAngleVelocity()

void osgParticle::Particle::transformAngleVelocity ( const osg::Matrix & xform)
inline

Transform angle and angularVelocity vectors by a matrix.

References _angle, _angul_arvel, and osg::Matrixd::preMult().

◆ transformPositionVelocity() [1/2]

void osgParticle::Particle::transformPositionVelocity ( const osg::Matrix & xform)
inline

Transform position and velocity vectors by a matrix.

References _position, _velocity, osg::Matrixd::preMult(), and osg::Matrixd::transform3x3().

◆ transformPositionVelocity() [2/2]

void osgParticle::Particle::transformPositionVelocity ( const osg::Matrix & xform1,
const osg::Matrix & xform2,
float r )
inline

Transform position and velocity vectors by a combination of two matrices.

References _position, _velocity, osg::Matrixd::preMult(), and osg::Matrixd::transform3x3().

◆ update()

bool osgParticle::Particle::update ( double dt,
bool onlyTimeStamp )

Update the particle (don't call this method manually).

This method is called automatically by ParticleSystem::update(); it updates the graphical properties of the particle for the current time, checks whether the particle is still alive, and then updates its position by computing P = P + V * dt (where P is the position and V is the velocity).

References getCurrentSize(), getEndTile(), getStartTile(), setTextureTile(), and setTextureTileRange().

◆ ParticleSystem

Member Data Documentation

◆ _ai

osg::ref_ptr<Interpolator> osgParticle::Particle::_ai
protected

◆ _alive

float osgParticle::Particle::_alive
protected

Referenced by isAlive().

◆ _angle

osg::Vec3 osgParticle::Particle::_angle
protected

◆ _angul_arvel

osg::Vec3 osgParticle::Particle::_angul_arvel
protected

◆ _ar

rangef osgParticle::Particle::_ar
protected

Referenced by getAlphaRange(), and setAlphaRange().

◆ _base_prop

osg::Vec3 osgParticle::Particle::_base_prop
protected

◆ _ci

osg::ref_ptr<Interpolator> osgParticle::Particle::_ci
protected

◆ _cr

rangev4 osgParticle::Particle::_cr
protected

Referenced by getColorRange(), and setColorRange().

◆ _cur_tile

int osgParticle::Particle::_cur_tile
protected

◆ _current_alpha

float osgParticle::Particle::_current_alpha
protected

Referenced by getCurrentAlpha().

◆ _current_color

osg::Vec4 osgParticle::Particle::_current_color
protected

Referenced by getCurrentColor().

◆ _current_size

float osgParticle::Particle::_current_size
protected

Referenced by getCurrentSize().

◆ _depth

double osgParticle::Particle::_depth
protected

Referenced by getDepth(), operator<(), and setDepth().

◆ _end_tile

int osgParticle::Particle::_end_tile
protected

◆ _lifeTime

double osgParticle::Particle::_lifeTime
protected

Referenced by getLifeTime(), and setLifeTime().

◆ _mass

float osgParticle::Particle::_mass
protected

Referenced by getMass(), and setMass().

◆ _massinv

float osgParticle::Particle::_massinv
protected

Referenced by getMassInv(), and setMass().

◆ _mustdie

bool osgParticle::Particle::_mustdie
protected

Referenced by kill().

◆ _nextParticle

int osgParticle::Particle::_nextParticle
protected

Referenced by getNextParticle(), and setNextParticle().

◆ _position

osg::Vec3 osgParticle::Particle::_position
protected

◆ _prev_angle

osg::Vec3 osgParticle::Particle::_prev_angle
protected

Referenced by getPreviousAngle().

◆ _prev_pos

osg::Vec3 osgParticle::Particle::_prev_pos
protected

Referenced by getPreviousPosition().

◆ _previousParticle

int osgParticle::Particle::_previousParticle
protected

◆ _radius

float osgParticle::Particle::_radius
protected

Referenced by getRadius(), and setRadius().

◆ _s_coord

float osgParticle::Particle::_s_coord
protected

Referenced by getSTexCoord().

◆ _s_tile

float osgParticle::Particle::_s_tile
protected

◆ _shape

Shape osgParticle::Particle::_shape
protected

Referenced by getShape(), and setShape().

◆ _si

osg::ref_ptr<Interpolator> osgParticle::Particle::_si
protected

◆ _sr

rangef osgParticle::Particle::_sr
protected

Referenced by getSizeRange(), and setSizeRange().

◆ _start_tile

int osgParticle::Particle::_start_tile
protected

◆ _t0

double osgParticle::Particle::_t0
protected

Referenced by getAge().

◆ _t_coord

float osgParticle::Particle::_t_coord
protected

Referenced by getTTexCoord().

◆ _t_tile

float osgParticle::Particle::_t_tile
protected

◆ _velocity

osg::Vec3 osgParticle::Particle::_velocity
protected

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

osg logo
Generated at Wed Jul 23 2025 00:00:00 for the OpenSceneGraph by doxygen 1.14.0.