Brownian Motion
This example simulates Brownian Motion. It demonstrates Flint’s built-in collision handling between particles.
The example also includes a custom action created to show and hide the air particles.
package
{
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.renderers.DisplayObjectRenderer;
import org.flintparticles.threeD.renderers.controllers.OrbitCamera;
import flash.display.Sprite;
import flash.geom.Vector3D;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var emitter:Emitter3D;
private var orbitter:OrbitCamera;
public function Main()
{
emitter = new BrownianMotion( stage );
var renderer:DisplayObjectRenderer = new DisplayObjectRenderer();
renderer.x = 200;
renderer.y = 200;
renderer.addEmitter( emitter );
addChild( renderer );
renderer.camera.position = new Vector3D( 0, 0, -400 );
renderer.camera.target = new Vector3D( 0, 0, 0 );
renderer.camera.projectionDistance = 400;
orbitter = new OrbitCamera( stage, renderer.camera );
orbitter.start();
emitter.start();
}
}
}package
{
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.displayObjects.Dot;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.ImageClass;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
air.addInitializer( new ImageClass( Dot, [2] ) );
air.addInitializer( new ColorInit( 0xFF666666, 0xFF666666 ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
var smoke:InitializerGroup = new InitializerGroup();
smoke.addInitializer( new ImageClass( Dot, [10] ) );
smoke.addInitializer( new ColorInit( 0xFFFFFFFF, 0xFFFFFFFF ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}import org.flintparticles.common.counters.*; import org.flintparticles.common.displayObjects.Dot; import org.flintparticles.common.initializers.*; import org.flintparticles.threeD.actions.*; import org.flintparticles.threeD.emitters.Emitter3D; import org.flintparticles.threeD.initializers.*; import org.flintparticles.threeD.renderers.*; import org.flintparticles.threeD.renderers.controllers.OrbitCamera; import org.flintparticles.threeD.zones.*; var emitter:Emitter3D = new Emitter3D(); emitter.counter = new Blast( 400 ); var air:InitializerGroup = new InitializerGroup(); air.addInitializer( new ImageClass( Dot, [2] ) ); air.addInitializer( new ColorInit( 0xFF666666, 0xFF666666 ) ); air.addInitializer( new MassInit( 1 ) ); air.addInitializer( new CollisionRadiusInit( 2 ) ); var smoke:InitializerGroup = new InitializerGroup(); smoke.addInitializer( new ImageClass( Dot, [10] ) ); smoke.addInitializer( new ColorInit( 0xFFFFFFFF, 0xFFFFFFFF ) ); smoke.addInitializer( new MassInit( 5 ) ); smoke.addInitializer( new CollisionRadiusInit( 10 ) ); emitter.addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) ); emitter.addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) ); emitter.addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) ); emitter.addAction( new Move() ); emitter.addAction( new Collide( 1 ) ); emitter.addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) ); emitter.addAction( new ShowAirAction( stage ) ); var renderer:DisplayObjectRenderer = new DisplayObjectRenderer(); renderer.x = 200; renderer.y = 200; renderer.addEmitter( emitter ); addChild( renderer ); renderer.camera.position = new Vector3D( 0, 0, -400 ); renderer.camera.target = new Vector3D( 0, 0, 0 ); renderer.camera.projectionDistance = 400; var orbitter:OrbitCamera = new OrbitCamera( stage, renderer.camera ); orbitter.start(); emitter.start();
package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}<?xml version="1.0" encoding="utf-8"?>
<s:Application
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:f="http://flintparticles.org/2009/flint3d"
xmlns:geom="flash.geom.*"
xmlns:local="*"
width="500" height="500"
backgroundColor="#000000">
<fx:Script>
<![CDATA[
import org.flintparticles.common.displayObjects.Dot;
]]>
</fx:Script>
<f:DisplayObjectRenderer id="renderer" width="500" height="500">
<f:camera>
<f:Camera projectionDistance="400">
<f:position>
<geom:Vector3D x="0" y="0" z="-400"/>
</f:position>
</f:Camera>
</f:camera>
<f:emitters>
<f:Emitter id="emitter" autoStart="true">
<f:counter>
<f:Blast startCount="400"/>
</f:counter>
<f:initializers>
<f:Position>
<f:BoxZone width="280" height="280" depth="280"/>
</f:Position>
<f:Velocity>
<f:SphereZone innerRadius="100" outerRadius="150"/>
</f:Velocity>
<f:ChooseInitializer weights="1,30">
<f:InitializerGroup>
<f:ImageClass imageClass="{Dot}" parameters="10"/>
<f:CollisionRadiusInit radius="10"/>
<f:MassInit mass="5"/>
<f:ColorInit minColor="0xFFFFFFFF" maxColor="0xFFFFFFFF"/>
</f:InitializerGroup>
<f:InitializerGroup>
<f:ImageClass imageClass="{Dot}" parameters="2"/>
<f:CollisionRadiusInit radius="2"/>
<f:MassInit mass="1"/>
<f:ColorInit minColor="0xFF666666" maxColor="0xFF666666"/>
</f:InitializerGroup>
</f:ChooseInitializer>
</f:initializers>
<f:actions>
<f:Move/>
<f:Collide bounce="1"/>
<f:BoundingBox minX="-150" maxX="150" minY="-150" maxY="150" minZ="-150" maxZ="150"/>
<local:ShowAirAction/>
</f:actions>
</f:Emitter>
</f:emitters>
</f:DisplayObjectRenderer>
</s:Application>package
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import mx.core.IMXMLObject;
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
public class ShowAirAction extends ActionBase implements IMXMLObject
{
private var _isDown:Boolean;
public function ShowAirAction()
{
_isDown = false;
}
public function initialized( document:Object, id:String ):void
{
if( document.stage )
{
setStage( document.stage );
}
else
{
DisplayObject( document ).addEventListener( Event.ADDED_TO_STAGE, addedToStage );
}
}
private function addedToStage( ev:Event ):void
{
setStage( ev.target.stage );
}
private function setStage( stage:DisplayObject ):void
{
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}package
{
import away3d.containers.ObjectContainer3D;
import away3d.containers.View3D;
import org.flintparticles.integration.away3d.v4.A3D4Renderer;
import org.flintparticles.threeD.emitters.Emitter3D;
import flash.display.Sprite;
import flash.events.Event;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var emitter:Emitter3D;
private var view:View3D;
private var renderer:A3D4Renderer;
public function Main()
{
emitter = new BrownianMotion( stage );
view = new View3D();
view.width = 400;
view.height = 400;
addChild( view );
var particleContainer:ObjectContainer3D = new ObjectContainer3D();
view.scene.addChild( particleContainer );
particleContainer.z = -200;
renderer = new A3D4Renderer( particleContainer );
renderer.addEmitter( emitter );
emitter.start();
addEventListener( Event.ENTER_FRAME, render, false, 0, true );
}
private function render( ev:Event ):void
{
// render the view
view.render();
}
}
}package
{
import away3d.materials.ColorMaterial;
import away3d.primitives.Sphere;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.integration.away3d.v4.initializers.A3D4CloneObject;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
var airImage:Sphere = new Sphere( new ColorMaterial( 0x666666, 1 ), 2, 6, 6 );
air.addInitializer( new A3D4CloneObject( airImage ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
var smoke:InitializerGroup = new InitializerGroup();
var smokeImage:Sphere = new Sphere( new ColorMaterial( 0xFFFFFF, 1 ), 10, 10, 10 );
smoke.addInitializer( new A3D4CloneObject( smokeImage ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}package
{
import flare.basic.Scene3D;
import flare.basic.Viewer3D;
import flare.core.Pivot3D;
import org.flintparticles.integration.flare3d.F3DRenderer;
import org.flintparticles.threeD.emitters.Emitter3D;
import flash.display.Sprite;
import flash.geom.Vector3D;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var emitter:Emitter3D;
private var scene:Scene3D;
private var renderer:F3DRenderer;
public function Main()
{
scene = new Viewer3D( this );
scene.clearColor = new Vector3D( 0, 0, 0 );
scene.camera.fieldOfView = 40;
var particleContainer:Pivot3D = new Pivot3D();
scene.addChild( particleContainer );
particleContainer.z = 500;
emitter = new BrownianMotion( stage );
renderer = new F3DRenderer( particleContainer );
renderer.addEmitter( emitter );
emitter.start();
}
}
}package
{
import flare.materials.Shader3D;
import flare.materials.filters.ColorFilter;
import flare.primitives.Sphere;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.integration.flare3d.initializers.F3DCloneObject;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
var airMaterial:Shader3D = new Shader3D( 'airShader', [new ColorFilter( 0x666666 )], false );
airMaterial.build();
var airImage:Sphere = new Sphere( 'sphere', 2, 12, airMaterial );
air.addInitializer( new F3DCloneObject( airImage ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
air.addInitializer( new ColorInit( 0xFF666666, 0xFF666666 ) );
var smoke:InitializerGroup = new InitializerGroup();
var smokeMaterial:Shader3D = new Shader3D( 'smokeShader', [new ColorFilter( 0xFFFFFF )], false );
smokeMaterial.build();
var smokeImage:Sphere = new Sphere( 'sphere', 10, 20, smokeMaterial );
smoke.addInitializer( new F3DCloneObject( smokeImage ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import flare.core.Pivot3D;
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
//particle.color = 0;
Pivot3D( particle.image ).hide();
}
else
{
//particle.color = 0xFF666666;
Pivot3D( particle.image ).show();
}
}
}
}
}package
{
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Resource;
import alternativa.engine3d.core.View;
import org.flintparticles.integration.alternativa3d.Alt3DRenderer;
import org.flintparticles.threeD.emitters.Emitter3D;
import flash.display.Sprite;
import flash.display.Stage3D;
import flash.events.Event;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var emitter : Emitter3D;
private var particleContainer : Object3D;
private var camera : Camera3D;
private var stage3D : Stage3D;
private var renderer : Alt3DRenderer;
public function Main()
{
camera = new Camera3D( 0.1, 10000 );
camera.view = new View( stage.stageWidth, stage.stageHeight );
camera.view.backgroundColor = 0x000000;
camera.view.hideLogo();
addChild( camera.view );
addChild( camera.diagram );
camera.rotationX = 0;
camera.y = 0;
camera.z = -360;
stage3D = stage.stage3Ds[0];
stage3D.addEventListener( Event.CONTEXT3D_CREATE, onContextCreate );
stage3D.requestContext3D();
}
private function onContextCreate( event : Event ) : void
{
particleContainer = new Object3D();
particleContainer.addChild( camera );
renderer = new Alt3DRenderer( particleContainer );
emitter = new BrownianMotion( stage );
renderer.addEmitter( emitter );
emitter.start();
addEventListener( Event.ENTER_FRAME, render, false, 0, true );
}
private function render( ev : Event ) : void
{
// render the view
camera.view.width = stage.stageWidth;
camera.view.height = stage.stageHeight;
camera.render( stage3D );
for each ( var resource:Resource in particleContainer.getResources( true ) )
{
resource.upload( stage3D.context3D );
}
}
}
}package
{
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.GeoSphere;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.integration.alternativa3d.initializers.Alt3DCloneObject;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
var airImage:GeoSphere = new GeoSphere( 2, 6, false, new FillMaterial( 0x666666, 1 ) );
air.addInitializer( new Alt3DCloneObject( airImage ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
var smoke:InitializerGroup = new InitializerGroup();
var smokeImage:GeoSphere = new GeoSphere( 10, 10, false, new FillMaterial( 0xFFFFFF, 1 ) );
smoke.addInitializer( new Alt3DCloneObject( smokeImage ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}package
{
import away3d.containers.View3D;
import org.flintparticles.integration.away3d.v3.A3D3Renderer;
import org.flintparticles.threeD.emitters.Emitter3D;
import flash.display.Sprite;
import flash.events.Event;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var emitter:Emitter3D;
private var view:View3D;
private var renderer:A3D3Renderer;
public function Main()
{
emitter = new BrownianMotion( stage );
view = new View3D({x:200,y:200});
addChild(view);
renderer = new A3D3Renderer( view.scene );
renderer.addEmitter( emitter );
emitter.start();
addEventListener( Event.ENTER_FRAME, render, false, 0, true );
}
private function render( ev:Event ):void
{
// render the view
view.render();
}
}
}package
{
import away3d.materials.ColorMaterial;
import away3d.primitives.Sphere;
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.integration.away3d.v3.initializers.A3D3ApplyMaterial;
import org.flintparticles.integration.away3d.v3.initializers.A3D3ObjectClass;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
air.addInitializer( new A3D3ObjectClass( Sphere, [ { radius:2, segmentsW:4, segmentsH:4 } ] ) );
air.addInitializer( new A3D3ApplyMaterial( ColorMaterial, 0x666666, 1 ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
var smoke:InitializerGroup = new InitializerGroup();
smoke.addInitializer( new A3D3ObjectClass( Sphere, [ { radius:10, segmentsW:6, segmentsH:6 } ] ) );
smoke.addInitializer( new A3D3ApplyMaterial( ColorMaterial, 0xFFFFFF, 1 ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}package
{
import org.flintparticles.integration.papervision3d.PV3DParticleRenderer;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.geom.Particles;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import flash.display.Sprite;
import flash.events.Event;
[SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
public class Main extends Sprite
{
private var viewport:Viewport3D;
private var emitter:Emitter3D;
private var pv3dRenderer:BasicRenderEngine;
private var flintRenderer:PV3DParticleRenderer;
private var scene:Scene3D;
private var camera:Camera3D;
public function Main()
{
viewport = new Viewport3D( 400, 400 );
addChild( viewport );
pv3dRenderer = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D();
camera.z = -400;
var particles:Particles = new Particles();
scene.addChild( particles );
emitter = new BrownianMotion( stage );
flintRenderer = new PV3DParticleRenderer( particles );
flintRenderer.addEmitter( emitter );
emitter.start();
addEventListener( Event.ENTER_FRAME, render );
}
private function render( ev:Event ):void
{
// render the view
pv3dRenderer.renderScene( scene, camera, viewport);
}
}
}package
{
import org.flintparticles.common.counters.Blast;
import org.flintparticles.common.initializers.ChooseInitializer;
import org.flintparticles.common.initializers.CollisionRadiusInit;
import org.flintparticles.common.initializers.ColorInit;
import org.flintparticles.common.initializers.InitializerGroup;
import org.flintparticles.common.initializers.MassInit;
import org.flintparticles.integration.papervision3d.initializers.PV3DApplyMaterial;
import org.flintparticles.integration.papervision3d.initializers.PV3DObjectClass;
import org.flintparticles.threeD.actions.BoundingBox;
import org.flintparticles.threeD.actions.Collide;
import org.flintparticles.threeD.actions.Move;
import org.flintparticles.threeD.emitters.Emitter3D;
import org.flintparticles.threeD.initializers.Position;
import org.flintparticles.threeD.initializers.Velocity;
import org.flintparticles.threeD.zones.BoxZone;
import org.flintparticles.threeD.zones.SphereZone;
import org.papervision3d.core.geom.renderables.Particle;
import org.papervision3d.materials.special.ParticleMaterial;
import flash.display.DisplayObject;
import flash.geom.Vector3D;
public class BrownianMotion extends Emitter3D
{
public function BrownianMotion( stage:DisplayObject )
{
counter = new Blast( 400 );
var air:InitializerGroup = new InitializerGroup();
air.addInitializer( new PV3DObjectClass( Particle, null, 4 ) );
air.addInitializer( new ColorInit( 0xFF666666, 0xFF666666 ) );
air.addInitializer( new MassInit( 1 ) );
air.addInitializer( new CollisionRadiusInit( 2 ) );
air.addInitializer( new PV3DApplyMaterial( ParticleMaterial, 0x666666, 1, ParticleMaterial.SHAPE_CIRCLE ) );
var smoke:InitializerGroup = new InitializerGroup();
smoke.addInitializer( new PV3DObjectClass( Particle, null, 20 ) );
smoke.addInitializer( new ColorInit( 0xFFFFFFFF, 0xFFFFFFFF ) );
smoke.addInitializer( new MassInit( 5 ) );
smoke.addInitializer( new CollisionRadiusInit( 10 ) );
smoke.addInitializer( new PV3DApplyMaterial( ParticleMaterial, 0xFFFFFF, 1, ParticleMaterial.SHAPE_CIRCLE ) );
addInitializer( new Position( new BoxZone( 280, 280, 280, new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), new Vector3D( 0, 0, 1 ) ) ) );
addInitializer( new Velocity( new SphereZone( new Vector3D( 0, 0, 0 ), 150, 100 ) ) );
addInitializer( new ChooseInitializer( [ air, smoke ], [ 30, 1 ] ) );
addAction( new Move() );
addAction( new Collide( 1 ) );
addAction( new BoundingBox( -150, 150, -150, 150, -150, 150, 1 ) );
addAction( new ShowAirAction( stage ) );
}
}
}package
{
import org.flintparticles.common.actions.ActionBase;
import org.flintparticles.common.emitters.Emitter;
import org.flintparticles.common.particles.Particle;
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class ShowAirAction extends ActionBase
{
private var _isDown:Boolean;
public function ShowAirAction( stage:DisplayObject )
{
_isDown = false;
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );
stage.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );
}
private function keyDownListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = true;
}
}
private function keyUpListener( ev:KeyboardEvent ):void
{
if( ev.keyCode == Keyboard.SHIFT )
{
_isDown = false;
}
}
override public function update( emitter:Emitter, particle:Particle, time:Number ):void
{
if( particle.mass == 1 )
{
if( _isDown )
{
particle.color = 0;
}
else
{
particle.color = 0xFF666666;
}
}
}
}
}