Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

# osgParticle::Particle Class Reference

Implementation of a particle. More...

List of all members.

## Public Types
enum | { INVALID_INDEX = -1 }
enum | Shape { POINT, QUAD, QUAD_TRIANGLESTRIP, HEXAGON, LINE }
| 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 rangef & | getSizeRange () const
| Get the minimum and maximum values for polygon size.
const rangef & | getAlphaRange () const
| Get the minimum and maximum values for alpha.
const rangev4 & | getColorRange () const
| Get the minimum and maximum values for color.
const Interpolator * | getSizeInterpolator () const
| Get the interpolator for computing the size of polygons.
const Interpolator * | getAlphaInterpolator () const
| Get the interpolator for computing alpha values.
const Interpolator * | getColorInterpolator () 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::Vec3 & | getPosition () const
| Get the position vector.
const osg::Vec3 & | getVelocity () const
| Get the velocity vector.
const osg::Vec3 & | getPreviousPosition () const
| Get the previous position (the position before last update).
const osg::Vec3 & | getAngle () const
| Get the angle vector.
const osg::Vec3 & | getAngularVelocity () const
| Get the rotational velocity vector.
const osg::Vec3 & | getPreviousAngle () const
| Get the previous angle vector.
const osg::Vec4 & | getCurrentColor () const
| Get the current color.
float | getCurrentAlpha () const
| Get the current alpha.
const float | getSTexCoord () const
| Get the s texture coordinate of the bottom left of the particle.
float | getTCoord () const
| Get the t texture coordinate of the bottom left of the particle.
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.
void | setAlphaInterpolator (Interpolator *ai)
| Set the interpolator for computing alpha values.
void | setColorInterpolator (Interpolator *ci)
| Set the interpolator for computing color values.
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)
| Update the particle (don't call this method manually).
void | beginRender () const
| Perform some pre-rendering tasks. Called automatically by particle systems.
void | render (const osg::Vec3 &xpos, const osg::Vec3 &px, const osg::Vec3 &py, float scale=1.0f) const
| Render the particle. Called automatically by particle systems.
void | endRender () const
| Perform some post-rendering tasks. Called automatically by particle systems.
float | getCurrentSize () const
| Get the current (interpolated) polygon size. Valid only after the first call to update().
void | setTextureTile (int sTile, int tTile, int numTiles=0)
| Specify how the particle texture is tiled.
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 | 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 | _alive
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 | _current_size
float | _current_alpha
osg::Vec4 | _current_color
float | _s_tile
float | _t_tile
int | _num_tile
int | _cur_tile
float | _s_coord
float | _t_coord
int | _previousParticle
int | _nextParticle

## 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

  | Enumeration values:
  INVALID_INDEX |

enum osgParticle::Particle::Shape

  | Shape of particles. NOTE: the LINE shape should be used in conjunction with FIXED alignment mode (see ParticleSystem). Enumeration values:
  POINT |
  QUAD |
  QUAD_TRIANGLESTRIP |
  HEXAGON |
  LINE |

## Constructor & Destructor Documentation

osgParticle::Particle::Particle | ( |  | ) |

## Member Function Documentation

void osgParticle::Particle::addAngularVelocity | ( | const osg::Vec3 & | dv | ) | `[inline]`

| Add a vector to the angular velocity vector.

void osgParticle::Particle::addVelocity | ( | const osg::Vec3 & | dv | ) | `[inline]`

| Add a vector to the velocity vector.

void osgParticle::Particle::beginRender | ( |  | ) | const`[inline]`

| Perform some pre-rendering tasks. Called automatically by particle systems.

void osgParticle::Particle::endRender | ( |  | ) | const`[inline]`

| Perform some post-rendering tasks. Called automatically by particle systems.

double osgParticle::Particle::getAge | ( |  | ) | const`[inline]`

| Get the age of the particle (in seconds).

const Interpolator * osgParticle::Particle::getAlphaInterpolator | ( |  | ) | const`[inline]`

| Get the interpolator for computing alpha values.

const rangef & osgParticle::Particle::getAlphaRange | ( |  | ) | const`[inline]`

| Get the minimum and maximum values for alpha.

const osg::Vec3 & osgParticle::Particle::getAngle | ( |  | ) | const`[inline]`

| Get the angle vector.

const osg::Vec3 & osgParticle::Particle::getAngularVelocity | ( |  | ) | const`[inline]`

| Get the rotational velocity vector.

const Interpolator * osgParticle::Particle::getColorInterpolator | ( |  | ) | const`[inline]`

| Get the interpolator for computing color values.

const rangev4 & osgParticle::Particle::getColorRange | ( |  | ) | const`[inline]`

| Get the minimum and maximum values for color.

float osgParticle::Particle::getCurrentAlpha | ( |  | ) | const`[inline]`

| Get the current alpha.

const osg::Vec4& osgParticle::Particle::getCurrentColor | ( |  | ) | const`[inline]`

| Get the current color.

float osgParticle::Particle::getCurrentSize | ( |  | ) | const`[inline]`

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

double osgParticle::Particle::getLifeTime | ( |  | ) | const`[inline]`

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

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.

float osgParticle::Particle::getMassInv | ( |  | ) | const`[inline]`

| Get `1 / getMass()`.

int osgParticle::Particle::getNextParticle | ( |  | ) | const`[inline]`

| Get the const next particle.

const osg::Vec3 & osgParticle::Particle::getPosition | ( |  | ) | const`[inline]`

| Get the position vector.

const osg::Vec3 & osgParticle::Particle::getPreviousAngle | ( |  | ) | const`[inline]`

| Get the previous angle vector.

int osgParticle::Particle::getPreviousParticle | ( |  | ) | const`[inline]`

| Get the previous particle.

const osg::Vec3 & osgParticle::Particle::getPreviousPosition | ( |  | ) | const`[inline]`

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

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.

Particle::Shape osgParticle::Particle::getShape | ( |  | ) | const`[inline]`

| Get the shape of the particle.

const Interpolator * osgParticle::Particle::getSizeInterpolator | ( |  | ) | const`[inline]`

| Get the interpolator for computing the size of polygons.

const rangef & osgParticle::Particle::getSizeRange | ( |  | ) | const`[inline]`

| Get the minimum and maximum values for polygon size.

const float osgParticle::Particle::getSTexCoord | ( |  | ) | const`[inline]`

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

float osgParticle::Particle::getTCoord | ( |  | ) | const`[inline]`

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

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.

bool osgParticle::Particle::isAlive | ( |  | ) | const`[inline]`

| Get whether the particle is still alive.

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.

void osgParticle::Particle::render | ( | const osg::Vec3 & | xpos,
|  | const osg::Vec3 & | px,
|  | const osg::Vec3 & | py,
|  | float | scale = 1.0f
| ) | const

| Render the particle. Called automatically by particle systems.

void osgParticle::Particle::setAlphaInterpolator | ( | Interpolator * | ai | ) | `[inline]`

| Set the interpolator for computing alpha values.

void osgParticle::Particle::setAlphaRange | ( | const rangef & | r | ) | `[inline]`

| Set the minimum and maximum values for alpha.

void osgParticle::Particle::setAngle | ( | const osg::Vec3 & | a | ) | `[inline]`

| Set the angle vector.

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).

void osgParticle::Particle::setColorInterpolator | ( | Interpolator * | ci | ) | `[inline]`

| Set the interpolator for computing color values.

void osgParticle::Particle::setColorRange | ( | const rangev4 & | r | ) | `[inline]`

| Set the minimum and maximum values for color.

void osgParticle::Particle::setLifeTime | ( | double | t | ) | `[inline]`

| Set the life time of the particle.

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.

void osgParticle::Particle::setNextParticle | ( | int | next | ) | `[inline]`

| Set the next particle.

void osgParticle::Particle::setPosition | ( | const osg::Vec3 & | p | ) | `[inline]`

| Set the position vector.

void osgParticle::Particle::setPreviousParticle | ( | int | previous | ) | `[inline]`

| Set the previous particle.

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.

void osgParticle::Particle::setShape | ( | Shape | s | ) | `[inline]`

| Set the shape of the particle.

void osgParticle::Particle::setSizeInterpolator | ( | Interpolator * | ri | ) | `[inline]`

| Set the interpolator for computing size values.

void osgParticle::Particle::setSizeRange | ( | const rangef & | r | ) | `[inline]`

| Set the minimum and maximum values for polygon size.

void osgParticle::Particle::setTextureTile | ( | int | sTile,
|  | int | tTile,
|  | int | numTiles = 0
| ) | `[inline]`

| Specify how the particle texture is tiled.

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

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

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.

void osgParticle::Particle::transformAngleVelocity | ( | const osg::Matrix & | xform | ) | `[inline]`

| Transform angle and angularVelocity vectors by a matrix.

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.

void osgParticle::Particle::transformPositionVelocity | ( | const osg::Matrix & | xform | ) | `[inline]`

| Transform position and velocity vectors by a matrix.

bool osgParticle::Particle::update | ( | double | dt | ) |

| 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).

## Member Data Documentation

osg::ref_ptr<Interpolator> osgParticle::Particle::_ai`[protected]`

bool osgParticle::Particle::_alive`[protected]`

osg::Vec3 osgParticle::Particle::_angle`[protected]`

osg::Vec3 osgParticle::Particle::_angul_arvel`[protected]`

rangef osgParticle::Particle::_ar`[protected]`

osg::ref_ptr<Interpolator> osgParticle::Particle::_ci`[protected]`

rangev4 osgParticle::Particle::_cr`[protected]`

int osgParticle::Particle::_cur_tile`[protected]`

float osgParticle::Particle::_current_alpha`[protected]`

osg::Vec4 osgParticle::Particle::_current_color`[protected]`

float osgParticle::Particle::_current_size`[protected]`

double osgParticle::Particle::_lifeTime`[protected]`

float osgParticle::Particle::_mass`[protected]`

float osgParticle::Particle::_massinv`[protected]`

bool osgParticle::Particle::_mustdie`[protected]`

int osgParticle::Particle::_nextParticle`[protected]`

int osgParticle::Particle::_num_tile`[protected]`

osg::Vec3 osgParticle::Particle::_position`[protected]`

osg::Vec3 osgParticle::Particle::_prev_angle`[protected]`

osg::Vec3 osgParticle::Particle::_prev_pos`[protected]`

int osgParticle::Particle::_previousParticle`[protected]`

float osgParticle::Particle::_radius`[protected]`

float osgParticle::Particle::_s_coord`[protected]`

float osgParticle::Particle::_s_tile`[protected]`

Shape osgParticle::Particle::_shape`[protected]`

osg::ref_ptr<Interpolator> osgParticle::Particle::_si`[protected]`

rangef osgParticle::Particle::_sr`[protected]`

double osgParticle::Particle::_t0`[protected]`

float osgParticle::Particle::_t_coord`[protected]`

float osgParticle::Particle::_t_tile`[protected]`

osg::Vec3 osgParticle::Particle::_velocity`[protected]`

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

- Particle