/** * @author Lee Stemkoski http://www.adelphi.edu/~stemkoski/ */ /* Particle Engine options: positionBase : new THREE.Vector3(), positionStyle : Type.CUBE or Type.SPHERE, // for Type.CUBE positionSpread : new THREE.Vector3(), // for Type.SPHERE positionRadius : 10, velocityStyle : Type.CUBE or Type.SPHERE, // for Type.CUBE velocityBase : new THREE.Vector3(), velocitySpread : new THREE.Vector3(), // for Type.SPHERE speedBase : 20, speedSpread : 10, accelerationBase : new THREE.Vector3(), accelerationSpread : new THREE.Vector3(), particleTexture : THREE.ImageUtils.loadTexture( 'images/star.png' ), // rotation of image used for particles angleBase : 0, angleSpread : 0, angleVelocityBase : 0, angleVelocitySpread : 0, angleAccelerationBase : 0, angleAccelerationSpread : 0, // size, color, opacity // for static values, use base/spread // for dynamic values, use Tween // (non-empty Tween takes precedence) sizeBase : 20.0, sizeSpread : 5.0, sizeTween : new Tween( [0, 1], [1, 20] ), // colors stored in Vector3 in H,S,L format colorBase : new THREE.Vector3(0.0, 1.0, 0.5), colorSpread : new THREE.Vector3(0,0,0), colorTween : new Tween( [0.5, 2], [ new THREE.Vector3(0, 1, 0.5), new THREE.Vector3(1, 1, 0.5) ] ), opacityBase : 1, opacitySpread : 0, opacityTween : new Tween( [2, 3], [1, 0] ), blendStyle : THREE.NormalBlending (default), THREE.AdditiveBlending particlesPerSecond : 200, particleDeathAge : 2.0, emitterDeathAge : 60 */ Examples = { // (1) build GUI for easy effects access. // (2) write ParticleEngineExamples.js // Not just any fountain -- a RAINBOW STAR FOUNTAIN of AWESOMENESS fountain : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 5, 0 ), positionSpread : new THREE.Vector3( 10, 0, 10 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, 160, 0 ), velocitySpread : new THREE.Vector3( 100, 20, 100 ), accelerationBase : new THREE.Vector3( 0, -100, 0 ), particleTexture : null, angleBase : 0, angleSpread : 180, angleVelocityBase : 0, angleVelocitySpread : 360 * 4, sizeTween : new Tween( [0, 1], [1, 20] ), opacityTween : new Tween( [2, 3], [1, 0] ), colorTween : new Tween( [0.5, 2], [ new THREE.Vector3(0,1,0.5), new THREE.Vector3(0.8, 1, 0.5) ] ), particlesPerSecond : 200, particleDeathAge : 3.0, emitterDeathAge : 60 }, fireball : { positionStyle : Type.SPHERE, positionBase : new THREE.Vector3( 0, 50, 0 ), positionRadius : 2, velocityStyle : Type.SPHERE, speedBase : 40, speedSpread : 8, // particleTexture : THREE.ImageUtils.loadTexture( 'images/smokeparticle.png' ), particleTexture : null, sizeTween : new Tween( [0, 0.1], [1, 150] ), opacityTween : new Tween( [0.7, 1], [1, 0] ), colorBase : new THREE.Vector3(0.02, 1, 0.4), blendStyle : THREE.AdditiveBlending, particlesPerSecond : 60, particleDeathAge : 1.5, emitterDeathAge : 60 }, smoke : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 0, 0 ), positionSpread : new THREE.Vector3( 10, 0, 10 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, 150, 0 ), velocitySpread : new THREE.Vector3( 80, 50, 80 ), accelerationBase : new THREE.Vector3( 0,-10,0 ), // particleTexture : THREE.ImageUtils.loadTexture( 'images/smokeparticle.png'), particleTexture : null, angleBase : 0, angleSpread : 720, angleVelocityBase : 0, angleVelocitySpread : 720, sizeTween : new Tween( [0, 1], [32, 128] ), opacityTween : new Tween( [0.8, 2], [0.5, 0] ), colorTween : new Tween( [0.4, 1], [ new THREE.Vector3(0,0,0.2), new THREE.Vector3(0, 0, 0.5) ] ), particlesPerSecond : 200, particleDeathAge : 2.0, emitterDeathAge : 60 }, clouds : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( -100, 100, 0 ), positionSpread : new THREE.Vector3( 0, 50, 60 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 40, 0, 0 ), velocitySpread : new THREE.Vector3( 20, 0, 0 ), // particleTexture : THREE.ImageUtils.loadTexture( 'images/smokeparticle.png'), particleTexture : null, sizeBase : 80.0, sizeSpread : 100.0, colorBase : new THREE.Vector3(0.0, 0.0, 1.0), // H,S,L opacityTween : new Tween([0,1,4,5],[0,1,1,0]), particlesPerSecond : 50, particleDeathAge : 10.0, emitterDeathAge : 60 }, snow : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 0, 0 ), positionSpread : new THREE.Vector3( 6000, 0, 6000 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 30, -200, 0 ), velocitySpread : new THREE.Vector3( 10, 50, 10 ), accelerationBase : new THREE.Vector3( 0, -10,0 ), angleBase : 0, angleSpread : 720, angleVelocityBase : 0, angleVelocitySpread : 60, // particleTexture : THREE.ImageUtils.loadTexture( 'images/snowflake.png' ), particleTexture : null, sizeTween : new Tween( [0, 0.25], [1, 20] ), colorBase : new THREE.Vector3(0.66, 1.0, 0.9), // H,S,L opacityTween : new Tween( [2, 3], [0.8, 0] ), particlesPerSecond : 15000, particleDeathAge : 4.0, emitterDeathAge : 600000 }, rain : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 0, 0 ), positionSpread : new THREE.Vector3( 6000, 0, 6000 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, -300, 0 ), velocitySpread : new THREE.Vector3( 10, 50, 10 ), accelerationBase : new THREE.Vector3( 0, -10,0 ), // particleTexture : THREE.ImageUtils.loadTexture( 'images/raindrop2flip.png' ), particleTexture : null, sizeBase : 20.0, sizeSpread : 4.0, colorBase : new THREE.Vector3(0.66, 1.0, 0.7), // H,S,L colorSpread : new THREE.Vector3(0.00, 0.0, 0.2), opacityBase : 0.6, particlesPerSecond : 15000, particleDeathAge : 4.0, emitterDeathAge : 600000 }, starfield : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 200, 0 ), positionSpread : new THREE.Vector3( 600, 400, 600 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, 0, 0 ), velocitySpread : new THREE.Vector3( 0.5, 0.5, 0.5 ), angleBase : 0, angleSpread : 720, angleVelocityBase : 0, angleVelocitySpread : 4, // particleTexture : THREE.ImageUtils.loadTexture( 'images/spikey.png' ), particleTexture : null, sizeBase : 10.0, sizeSpread : 2.0, colorBase : new THREE.Vector3(0.15, 1.0, 0.9), // H,S,L colorSpread : new THREE.Vector3(0.00, 0.0, 0.2), opacityBase : 1, particlesPerSecond : 20000, particleDeathAge : 60.0, emitterDeathAge : 0.1 }, fireflies : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 100, 0 ), positionSpread : new THREE.Vector3( 400, 200, 400 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, 0, 0 ), velocitySpread : new THREE.Vector3( 60, 20, 60 ), // particleTexture : THREE.ImageUtils.loadTexture( 'images/spark.png' ), particleTexture : null, sizeBase : 30.0, sizeSpread : 2.0, opacityTween : new Tween([0.0, 1.0, 1.1, 2.0, 2.1, 3.0, 3.1, 4.0, 4.1, 5.0, 5.1, 6.0, 6.1], [0.2, 0.2, 1.0, 1.0, 0.2, 0.2, 1.0, 1.0, 0.2, 0.2, 1.0, 1.0, 0.2] ), colorBase : new THREE.Vector3(0.30, 1.0, 0.6), // H,S,L colorSpread : new THREE.Vector3(0.3, 0.0, 0.0), particlesPerSecond : 20, particleDeathAge : 6.1, emitterDeathAge : 600 }, startunnel : { positionStyle : Type.CUBE, positionBase : new THREE.Vector3( 0, 0, 0 ), positionSpread : new THREE.Vector3( 10, 10, 10 ), velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3( 0, 100, 200 ), velocitySpread : new THREE.Vector3( 40, 40, 80 ), angleBase : 0, angleSpread : 720, angleVelocityBase : 10, angleVelocitySpread : 0, // particleTexture : THREE.ImageUtils.loadTexture( 'images/spikey.png' ), particleTexture : null, sizeBase : 4.0, sizeSpread : 2.0, colorBase : new THREE.Vector3(0.15, 1.0, 0.8), // H,S,L opacityBase : 1, blendStyle : THREE.AdditiveBlending, particlesPerSecond : 500, particleDeathAge : 4.0, emitterDeathAge : 60 }, firework : { positionStyle : Type.SPHERE, positionBase : new THREE.Vector3( 0, 100, 0 ), positionRadius : 10, velocityStyle : Type.SPHERE, speedBase : 90, speedSpread : 10, accelerationBase : new THREE.Vector3( 0, -80, 0 ), // particleTexture : THREE.ImageUtils.loadTexture( 'images/spark.png' ), particleTexture : null, sizeTween : new Tween( [0.5, 0.7, 1.3], [5, 40, 1] ), opacityTween : new Tween( [0.2, 0.7, 2.5], [0.75, 1, 0] ), colorTween : new Tween( [0.4, 0.8, 1.0], [ new THREE.Vector3(0,1,1), new THREE.Vector3(0,1,0.6), new THREE.Vector3(0.8, 1, 0.6) ] ), blendStyle : THREE.AdditiveBlending, particlesPerSecond : 3000, particleDeathAge : 2.5, emitterDeathAge : 0.2 }, candle : { positionStyle : Type.SPHERE, positionBase : new THREE.Vector3( 0, 50, 0 ), positionRadius : 2, velocityStyle : Type.CUBE, velocityBase : new THREE.Vector3(0,200,0), velocitySpread : new THREE.Vector3(40,0,40), // particleTexture : THREE.ImageUtils.loadTexture( 'images/smokeparticle.png' ), particleTexture : null, sizeTween : new Tween( [0, 0.3, 1.2], [20, 150, 1] ), opacityTween : new Tween( [0.9, 1.5], [1, 0] ), colorTween : new Tween( [0.5, 1.0], [ new THREE.Vector3(0.02, 1, 0.5), new THREE.Vector3(0.05, 1, 0) ] ), blendStyle : THREE.AdditiveBlending, particlesPerSecond : 200, particleDeathAge : 10, emitterDeathAge : 600000 } }