/wpf3dPart

3D Particle System for Windows Presentation Foundation

http://www.brains-N-brawn.com/wpf3dPart 12/31/2007 casey chesnut

comment(s) 

Introduction

this is just a quick code dump. i needed a simple particle system for WPF 3D. i'd actually written a 2D particle system using GDI+ a couple years ago, so i recreated the basics for WPF 3D. the pic below shows a fountain effect with 3 models and a downward force. the models grow and rotate over time. the sliders rotate around the x,y,z axis to see it in 3D.

Overview

the code below shows how to use the particle system.

//create Model3Ds for the shapes of the particles above
//
ParticleSystemParameters psp = new ParticleSystemParameters();
//add particle shapes
psp.ParticleShapes.Add(redCube);
psp.ParticleShapes.Add(blueSphere);
psp.ParticleShapes.Add(greenTea);
//how shapes will be picked
psp.ShapePickingOrder = ParticleResourceOrder.Loop;
//how fast to emit particles
psp.EmissionRate = 0.02f;
psp.EmissionRateVariation = 100;
//how long particles should live
psp.Lifetime = 1500;
psp.LifetimeVariation = 25;
//direction to emit particles
psp.EmitDirection = new Vector3D(0, 1, 0);
psp.EmitDirectionVariation = new Vector3D(.5, .5, .5);
//speed for emitting particles
psp.EmitVelocity = 1.5f;
psp.EmitVelocityVariation = 50;
//external force applied against particles (e.g. gravity)
psp.ForceDirection = new Vector3D(0, -1, 0);
psp.ForceVelocity = .05f;
//scale particles
psp.ScaleIn = .1f;
psp.ScaleOut = 1.5f;
//rotate particles
psp.RotateX = 720;
psp.RotateY = 0;
psp.RotateZ = 0;

//create particle system using parameters above
ps = new ParticleSystem(psp);
//add particle system to Viewport3D
this.mvPartSys.Children.Add(ps); 
ps.Start();

Conclusion

er, um ... so its a basic 3D particle system. took about a day to write.

Source

C# source code

Updates

none planned, but the method used to translate particles needs to be changed to be more WPF-ish.

Future

thinking about coding something for the XNA Artificial Intelligence contest