Normally the automatic setup is useful, but in the case of the .osg support this automatic
update was forcing premature loading of imagery that wasn't necessarily, and can lead to
reports of looking for files that arn't present.
I spent some more time debugging and it turns out there was a bug in
the ParticleSystem::update_bounds function. When the bound is being
reset, both the min and max are being set to the same postion without
the radius being subtracted/added to it. When there is only one
particle alive in the system this causes it to be culled by small
feature culling. I've modifed the function so that when the bound is
reset, the radius is subtracted/added to the position. This fixes my
problem."
the position of the emitter in the previous frame and the new position in the new
frame, the number of particles added also scales up to compensate for this movement.
"The first is with
Particle.cpp. I made a change so that when the lifetime is 0 (lasts
forever) the sizeRange, colorRange, and alphaRange are used to create
a random size, color, and alpha."
"The second change is with range and SectorPlacer. The distribution of
particles across the sector was not uniform. I added get_random_sqrtf()
function where it is used in SectorPlacer::Place(). This seems to make
the distribution uniform (at least when minimum radius is 0)."
Clients just have to call Particle::setTextureTile() and specify the number of
horizontal and vertical tiles that make the animation up in the texture image."
email from Marco)
"Most relevant news:
1) particle systems now have the "freezeOnCull" property set to false by
default. Since it is an optimization, and using it may cause some unwanted
behaviors if not handled properly, it makes more sense to turn it off by
default.
2) new "LINE" shape mode which uses GL_LINES to draw line segments that
point to the direction of motion.
3) particles can now have a rotation angle and angular velocity.
4) new AngularAccelOperator applies angular acceleration to particles.
5) particle processors such as emitters and programs can have a "start",
"end" and "reset" time coordinate. For example, an emitter may be instructed
to start emitting particles only after a certain time, stop after another
amount of time and then start again.
Update (2) is from Gideon May.
Updates (3) to (5) are from Douglas A. Pouk."
this are replaced by the osg::computeLocalToWorld/WorldToLocal() functions
found in osg/Transform.
Made the ReleaseTextureAndDisplayListsVisitor a public nested class of
osgDB::DatabasePager to allow it to be used in the TXP plugin, and added
usage of this visitor to the TXP plugin to make sure that textures and
display lists are released during the update thread.
leaving it up to the Viewer to specify the mode (which by default is MultiThreaded).
Added a check for the presence of osgParticle systems so that threading is
disabled in this case.
decoupled from osg::Drawable. The Drawable::getStats() virtual method
no longer exists.
Updated the Viewer to use the osg::Statistics incarnation and reformated stats
to clean it up.