15#ifndef OSGPARTICLE_PARTICLE
16#define OSGPARTICLE_PARTICLE 1
72 inline Shape getShape()
const;
75 inline void setShape(
Shape s);
78 inline bool isAlive()
const;
81 inline double getLifeTime()
const;
84 inline double getAge()
const;
87 inline const rangef& getSizeRange()
const;
90 inline const rangef& getAlphaRange()
const;
93 inline const rangev4& getColorRange()
const;
102 inline const Interpolator* getColorInterpolator()
const;
107 inline float getRadius()
const;
112 inline float getMass()
const;
115 inline float getMassInv()
const;
118 inline const osg::Vec3& getPosition()
const;
124 inline const osg::Vec3& getVelocity()
const;
127 inline const osg::Vec3& getPreviousPosition()
const;
130 inline const osg::Vec3& getAngle()
const;
133 inline const osg::Vec3& getAngularVelocity()
const;
136 inline const osg::Vec3& getPreviousAngle()
const;
158 inline int getTileS()
const;
161 inline int getTileT()
const;
164 inline int getNumTiles()
const {
return _end_tile - _start_tile + 1; }
173 inline void setLifeTime(
double t);
176 inline void setSizeRange(
const rangef& r);
179 inline void setAlphaRange(
const rangef& r);
182 inline void setColorRange(
const rangev4& r);
199 inline void setRadius(
float r);
204 inline void setMass(
float m);
207 inline void setPosition(
const osg::Vec3& p);
213 inline void setVelocity(
const osg::Vec3& v);
216 inline void addVelocity(
const osg::Vec3& dv);
219 inline void transformPositionVelocity(
const osg::Matrix& xform);
225 inline void setAngle(
const osg::Vec3& a);
231 inline void setAngularVelocity(
const osg::Vec3& v);
234 inline void addAngularVelocity(
const osg::Vec3& dv);
237 inline void transformAngleVelocity(
const osg::Matrix& xform);
245 bool update(
double dt,
bool onlyTimeStamp);
248 inline float getCurrentSize()
const;
253 inline void setTextureTileRange(
int sTile,
int tTile,
int startTile,
int endTile);
256 inline void setTextureTile(
int sTile,
int tTile,
int end = -1);
258 inline int getStartTile()
const;
260 inline int getEndTile()
const;
510 float one_minus_r = 1.0f-r;
511 _position = position1*r + position2*one_minus_r;
512 _velocity = velocity1*r + velocity2*one_minus_r;
571 _s_tile = (sTile>0) ? 1.0f /
static_cast<float>(sTile) : 1.0f;
572 _t_tile = (tTile>0) ? 1.0f /
static_cast<float>(tTile) : 1.0f;
An abstract base class for implementing interpolators.
Definition osgParticle/Interpolator:30
Definition ParticleSystem:54
float getTTexCoord() const
Get the t texture coordinate of the bottom left of the particle.
Definition Particle:148
void transformAngleVelocity(const osg::Matrix &xform)
Transform angle and angularVelocity vectors by a matrix.
Definition Particle:530
bool update(double dt, bool onlyTimeStamp)
float _s_tile
Definition Particle:320
Shape _shape
Definition Particle:288
int getTileT() const
Get height of texture tile.
Definition Particle:438
rangev4 _cr
Definition Particle:292
osg::ref_ptr< Interpolator > _si
Definition Particle:294
float _current_size
Definition Particle:315
osg::Vec3 _prev_pos
Definition Particle:304
void setPreviousParticle(int previous)
Set the previous particle.
Definition Particle:263
float getSTexTile() const
Get the texture coordinate width of the particle.
Definition Particle:151
void setDepth(double d)
Set the depth of the particle.
Definition Particle:275
osg::Vec3 _angle
Definition Particle:309
void setSizeRange(const rangef &r)
Set the minimum and maximum values for polygon size.
Definition Particle:453
double getDepth() const
Get the depth of the particle.
Definition Particle:278
void setShape(Shape s)
Set the shape of the particle.
Definition Particle:343
float _radius
Definition Particle:301
const rangef & getAlphaRange() const
Get the minimum and maximum values for alpha.
Definition Particle:378
void addAngularVelocity(const osg::Vec3 &dv)
Add a vector to the angular velocity vector.
Definition Particle:525
void setTextureTile(int sTile, int tTile, int end=-1)
Same as above, range starts at 0 and ends at end.
Definition Particle:564
int getTileS() const
Get width of texture tile.
Definition Particle:433
float _t_tile
Definition Particle:321
osg::Vec3 _velocity
Definition Particle:306
int _start_tile
Definition Particle:322
double getLifeTime() const
Get the life time of the particle (in seconds).
Definition Particle:353
osg::Vec3 _prev_angle
Definition Particle:308
osg::ref_ptr< Interpolator > _ci
Definition Particle:296
const Interpolator * getColorInterpolator() const
Get the interpolator for computing color values.
Definition Particle:398
osg::Vec4 _current_color
Definition Particle:318
void addVelocity(const osg::Vec3 &dv)
Add a vector to the velocity vector.
Definition Particle:493
void setAlphaInterpolator(Interpolator *ai)
Set the interpolator for computing alpha values.
Definition Particle:473
float getMass() const
Definition Particle:542
float _massinv
Definition Particle:303
void setColorRange(const rangev4 &r)
Set the minimum and maximum values for color.
Definition Particle:463
void setTextureTileRange(int sTile, int tTile, int startTile, int endTile)
Definition Particle:569
osg::Vec3 _position
Definition Particle:305
void setAngle(const osg::Vec3 &a)
Set the angle vector.
Definition Particle:515
float getMassInv() const
Get 1 / getMass().
Definition Particle:547
const osg::Vec3 & getPreviousAngle() const
Get the previous angle vector.
Definition Particle:428
int _end_tile
Definition Particle:323
const osg::Vec4 & getCurrentColor() const
Get the current color.
Definition Particle:139
double _t0
Definition Particle:312
void setPosition(const osg::Vec3 &p)
Set the position vector.
Definition Particle:483
double _depth
Definition Particle:333
float getCurrentSize() const
Get the current (interpolated) polygon size. Valid only after the first call to update().
Definition Particle:558
osg::Vec3 _angul_arvel
Definition Particle:310
osg::ref_ptr< Interpolator > _ai
Definition Particle:295
void setAlphaRange(const rangef &r)
Set the minimum and maximum values for alpha.
Definition Particle:458
const Interpolator * getAlphaInterpolator() const
Get the interpolator for computing alpha values.
Definition Particle:393
double _lifeTime
Definition Particle:299
int getNumTiles() const
Get number of texture tiles.
Definition Particle:164
rangef _sr
Definition Particle:290
void setSizeInterpolator(Interpolator *ri)
Set the interpolator for computing size values.
Definition Particle:468
float _t_coord
Definition Particle:326
float getSTexCoord() const
Get the s texture coordinate of the bottom left of the particle.
Definition Particle:145
int getEndTile() const
Definition Particle:598
bool _mustdie
Definition Particle:298
const rangev4 & getColorRange() const
Get the minimum and maximum values for color.
Definition Particle:383
void kill()
Definition Particle:443
bool isAlive() const
Get whether the particle is still alive.
Definition Particle:348
float _mass
Definition Particle:302
const osg::Vec3 & getPreviousPosition() const
Get the previous position (the position before last update).
Definition Particle:413
float getTTexTile() const
Get the texture coordinate height of the particle.
Definition Particle:154
void setNextParticle(int next)
Set the next particle.
Definition Particle:269
void setSizeInterpolator(const osg::ref_ptr< T > &ri)
Definition Particle:186
void setAlphaInterpolator(const osg::ref_ptr< T > &ri)
Definition Particle:190
Shape
Definition Particle:60
@ POINT
Definition Particle:61
@ LINE
Definition Particle:65
@ QUAD_TRIANGLESTRIP
Definition Particle:63
@ HEXAGON
Definition Particle:64
@ QUAD
Definition Particle:62
int getStartTile() const
Definition Particle:593
rangef _ar
Definition Particle:291
void setMass(float m)
Definition Particle:552
void setColorInterpolator(Interpolator *ci)
Set the interpolator for computing color values.
Definition Particle:478
int _cur_tile
Definition Particle:324
Shape getShape() const
Get the shape of the particle.
Definition Particle:338
const rangef & getSizeRange() const
Get the minimum and maximum values for polygon size.
Definition Particle:373
double getAge() const
Get the age of the particle (in seconds).
Definition Particle:358
osg::Vec3 _base_prop
Definition Particle:317
bool operator<(const Particle &P) const
Sorting operator.
Definition Particle:281
const osg::Vec3 & getPosition() const
Get the position vector.
Definition Particle:403
float _s_coord
Definition Particle:325
void setLifeTime(double t)
Set the life time of the particle.
Definition Particle:448
int getPreviousParticle() const
Get the previous particle.
Definition Particle:266
int _previousParticle
Definition Particle:329
float _alive
Definition Particle:314
void setUpTexCoordsAsPartOfConnectedParticleSystem(ParticleSystem *ps)
Method for initializing a particles texture coords as part of a connected particle system.
int _nextParticle
Definition Particle:330
const osg::Vec3 & getVelocity() const
Definition Particle:408
float getCurrentAlpha() const
Get the current alpha.
Definition Particle:142
void transformPositionVelocity(const osg::Matrix &xform)
Transform position and velocity vectors by a matrix.
Definition Particle:498
float getRadius() const
Definition Particle:363
float _current_alpha
Definition Particle:316
void setVelocity(const osg::Vec3 &v)
Definition Particle:488
void setColorInterpolator(const osg::ref_ptr< T > &ri)
Definition Particle:194
int getNextParticle() const
Get the const next particle.
Definition Particle:272
void setRadius(float r)
Definition Particle:368
const Interpolator * getSizeInterpolator() const
Get the interpolator for computing the size of polygons.
Definition Particle:388
const osg::Vec3 & getAngularVelocity() const
Get the rotational velocity vector.
Definition Particle:423
const osg::Vec3 & getAngle() const
Get the angle vector.
Definition Particle:418
void setAngularVelocity(const osg::Vec3 &v)
Definition Particle:520
static Vec3f transform3x3(const Vec3f &v, const Matrixd &m)
Definition Matrixd:665
Vec3f preMult(const Vec3f &v) const
Definition Matrixd:618
T * get() const
Definition ref_ptr:117
Definition AccelOperator:27
#define OSGPARTICLE_EXPORT
Definition osgParticle/Export:40