[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] | [ Search: ] |
To convert the old snow particle system to new particles you can use a box emitter which is oriented at the top where the snow drops should appear and which is very thin. You can use a force effector with random acceleration on the XZ plane to get the effect that snowflakes drift. Here you see an example of a snow particle system in the world file:
<meshfact name="snowFact"> <plugin>crystalspace.mesh.loader.factory.particles</plugin> <params> <particlesize x="0.17" y="0.17" /> <minbb> <min x="-5" y="-0.3" z="-5" /> <max x="10" y="6" z="10" /> </minbb> <sortmode>none</sortmode> <emitter type="box"> <emissionrate>250</emissionrate> <mass min="5" max="7.5" /> <box> <min x="-5" y="6" z="-5" /> <max x="10" y="6" z="10" /> </box> <uniformvelocity /> <initialvelocity x="0" y="-1.42" z="0" /> <initialttl min="5" max="5" /> <placement>volume</placement> </emitter> <effector type="lincolor"> <color red="0" green="0" blue="1" time="5" /> </effector> <effector type="force"> <randomacceleration x="2.5" y="0" z="2.5" /> </effector> </params> </meshfact> ... <meshobj name="snowfall"> <priority>alpha</priority> <plugin>crystalspace.mesh.loader.particles</plugin> <ztest /> <params> <factory>snowFact</factory> <mixmode> <add /> </mixmode> <material>snow</material> </params> <move> <v x="10" y="0" z="10" /> </move> </meshobj> |
Here is how this could work in code:
csRef<iMeshFactoryWrapper> mfw = engine->CreateMeshFactory ( "crystalspace.mesh.object.particles", "snow"); if (!mfw) return; csRef<iMeshWrapper> exp = engine->CreateMeshWrapper (mfw, "custom snow", sector, csVector3 (0, 0, 0)); exp->SetZBufMode(CS_ZBUF_TEST); exp->GetMeshObject()->SetMixMode (CS_FX_ADD); exp->GetMeshObject()->SetMaterialWrapper (mat); csRef<iParticleBuiltinEmitterFactory> emit_factory = csLoadPluginCheck<iParticleBuiltinEmitterFactory> ( Sys->object_reg, "crystalspace.mesh.object.particles.emitter", false); csRef<iParticleBuiltinEffectorFactory> eff_factory = csLoadPluginCheck<iParticleBuiltinEffectorFactory> ( Sys->object_reg, "crystalspace.mesh.object.particles.effector", false); csRef<iParticleBuiltinEmitterBox> boxemit = emit_factory->CreateBox (); boxemit->SetBox (bbox); boxemit->SetParticlePlacement (CS_PARTICLE_BUILTIN_VOLUME); boxemit->SetEmissionRate (num / 5f); boxemit->SetInitialMass (5.0f, 7.5f); boxemit->SetUniformVelocity (true); boxemit->SetInitialTTL (5f, 5f); boxemit->SetInitialVelocity (csVector3 (0, -1.42f, 0), csVector3 (0)); csRef<iParticleBuiltinEffectorLinColor> lincol = eff_factory-> CreateLinColor (); lincol->AddColor (csColor4 (.25,.25,.25,1), 2.5f); csRef<iParticleBuiltinEffectorForce> force = eff_factory-> CreateForce (); force->SetRandomAcceleration (csVector3 (1.5f, 0.0f, 1.5f)); csRef<iParticleSystem> partstate = scfQueryInterface<iParticleSystem> (exp->GetMeshObject ()); partstate->SetMinBoundingBox (bbox); partstate->SetParticleSize (csVector2 (0.07f, 0.07f)); partstate->AddEmitter (boxemit); partstate->AddEffector (lincol); partstate->AddEffector (force); |
This document was generated using texi2html 1.76.