History: Moving Space Dust Effect
Source of version: 3 (current)
Copy to clipboard
This snippet shows how to code a particle effect attached to a moving SceneNode, so that the particle effect follows it.
Perfect for a space dust effect, or for rain.
__Captain Nemo__:
''Here is a snippet from my own code. The particle system is attached to a child scene node of the camera. If a particle is further away from the camera than some specified distance I mirror it along its direction vector to the camera. E.g. if the particle is in front of the camera I position it behind the camera, if it's to the left I position it to the right etc.''
''This code also changes the size of the particles to avoid them becoming too large if they are close to the camera.''
{CODE(wrap="1", colors="c++")}bool XXX::frameStarted(const FrameEvent& evt)
{
const float maxDist = 250.0;
const float mirrorDist = maxDist*0.99;
const float dimFactor = 0.8*0.005*0.005;
const float maxDist2 = maxDist*maxDist;
Camera* cam = mCamera->getCamera();
const Vector3& camPos = cam->getWorldPosition();
ParticleIterator pit = mParticleSystem->_getIterator();
while (!pit.end())
{
Particle* particle = pit.getNext();
Vector3& pos = particle->position;
particle->timeToLive = 999999.0f;
Vector3 pDir = pos-camPos;
float dist = pDir.squaredLength();
float dim = dist*dimFactor;
particle->setDimensions(dim, dim);
if (dist > maxDist2) {
pDir.normalise();
Vector3 p = camPos-pDir*mirrorDist;
particle->position = p;
}
}
return true;
}
{CODE}
Copied with permission from this topic: [http://www.ogre3d.org/phpBB2/viewtopic.php?t=19122]