Here is some simple code for a rain system that handles this case:
Particle setup
Code: Select all
scene::IParticleSystemSceneNode* ps = 0;
ps = smgr->addParticleSystemSceneNode(false);
ps->setParent(smgr->getActiveCamera());
scene::IParticleEmitter* em = ps->createBoxEmitter(
core::aabbox3d<f32>(-10,-10,-10,20,20,20),
core::vector3df(0.00f,0.00f,0.0f),
700,1000,
video::SColor(0,255,255,255), video::SColor(0,255,255,255),
500,2000);
ps->setEmitter(em);
em->drop();
scene::IParticleAffector* paf =
ps->createGravityAffector(core::vector3df(0.00f,-0.25f, 0.0f), 1000);
ps->addAffector(paf);
paf->drop();
ps->setMaterialFlag(video::EMF_LIGHTING, false);
ps->setMaterialType(EMT_TRANSPARENT_ALPHA_CHANNEL);
ps->setMaterialTexture(0, driver->getTexture("raindrop.png"));
Code: Select all
core::vector3df camDir=smgr->getActiveCamera()->getTarget()-smgr->getActiveCamera()->getAbsolutePosition();
camDir=camDir.normalize();
f32 camPitch = camDir.dotProduct(core::vector3df(0,1,0));
if(camPitch<0.0)
camPitch = camDir.dotProduct(core::vector3df(0,-1,0));
camPitch=(1.0f-camPitch)+0.01;
ps->setParticleSize(core::dimension2d<f32>(0.05f, 1.5f*camPitch));