package
{
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.renderers.BitmapRenderer;
  import org.flintparticles.threeD.renderers.controllers.OrbitCamera;

  import flash.display.Sprite;
  import flash.geom.Rectangle;
  import flash.geom.Vector3D;

  [SWF(width='400', height='400', frameRate='60', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var smoke:Emitter3D;
    private var fire:Emitter3D;
    private var orbitter:OrbitCamera;
    
    public function Main()
    {
      smoke = new Smoke();      
      smoke.start( );
      
      fire = new Fire();
      fire.start( );
      
      var renderer:BitmapRenderer = new BitmapRenderer( new Rectangle( -200, -200, 400, 400 ) );
      renderer.x = 200;
      renderer.y = 200;
      renderer.addEmitter( smoke );
      renderer.addEmitter( fire );
      addChild( renderer );
      
      renderer.camera.position = new Vector3D( 0, -150, -400 );
      renderer.camera.target = new Vector3D( 0, -150, 0 );
      renderer.camera.projectionDistance = 400;
      orbitter = new OrbitCamera( stage, renderer.camera );
      orbitter.start();
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.ColorChange;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.common.initializers.SharedImage;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RotateToDirection;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fire extends Emitter3D
  {
    public function Fire()
    {
      counter = new Steady( 60 );

      addInitializer( new Lifetime( 2, 3 ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
      addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
      addInitializer( new SharedImage( new FireBlob() ) );

      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 1 ) );
      addAction( new Accelerate( new Vector3D( 0, -40, 0 ) ) );
      addAction( new ColorChange( 0xFFFFCC00, 0x00CC0000 ) );
      addAction( new ScaleImage( 1, 1.5 ) );
      addAction( new RotateToDirection() );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.displayObjects.RadialDot;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.common.initializers.SharedImage;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RandomDrift;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ConeZone;

  import flash.geom.Vector3D;

  public class Smoke extends Emitter3D
  {
    public function Smoke()
    {
      counter = new Steady( 10 );
      
      addInitializer( new Lifetime( 11, 12 ) );
      addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, -1, 0 ), 0.5, 40, 30 ) ) );
      addInitializer( new SharedImage( new RadialDot( 6 ) ) );
      
      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 0.01 ) );
      addAction( new ScaleImage( 1, 15 ) );
      addAction( new Fade( 0.15, 0 ) );
      addAction( new RandomDrift( 15, 15, 15 ) );
    }
  }
}
import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
import org.flintparticles.common.displayObjects.RadialDot;
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.BitmapRenderer;
import org.flintparticles.threeD.renderers.controllers.OrbitCamera;
import org.flintparticles.threeD.zones.*;

var smoke:Emitter3D = new Emitter3D();
smoke.counter = new Steady( 10 );
  
smoke.addInitializer( new Lifetime( 11, 12 ) );
smoke.addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, -1, 0 ), 0.5, 40, 30 ) ) );
smoke.addInitializer( new SharedImage( new RadialDot( 6 ) ) );
  
smoke.addAction( new Age( ) );
smoke.addAction( new Move( ) );
smoke.addAction( new LinearDrag( 0.01 ) );
smoke.addAction( new ScaleImage( 1, 15 ) );
smoke.addAction( new Fade( 0.15, 0 ) );
smoke.addAction( new RandomDrift( 15, 15, 15 ) );

smoke.start( );

var fire:Emitter3D = new Emitter3D();
fire.counter = new Steady( 60 );

fire.addInitializer( new Lifetime( 2, 3 ) );
fire.addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
fire.addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
fire.addInitializer( new SharedImage( new FireBlob() ) );

fire.addAction( new Age( ) );
fire.addAction( new Move( ) );
fire.addAction( new LinearDrag( 1 ) );
fire.addAction( new Accelerate( new Vector3D( 0, -40, 0 ) ) );
fire.addAction( new ColorChange( 0xFFFFCC00, 0x00CC0000 ) );
fire.addAction( new ScaleImage( 1, 1.5 ) );
fire.addAction( new RotateToDirection() );

fire.start( );

var renderer:BitmapRenderer = new BitmapRenderer( new Rectangle( -200, -200, 400, 400 ) );
renderer.x = 200;
renderer.y = 200;
renderer.addEmitter( smoke );
renderer.addEmitter( fire );
addChild( renderer );

renderer.camera.position = new Vector3D( 0, -150, -400 );
renderer.camera.target = new Vector3D( 0, -150, 0 );
renderer.camera.projectionDistance = 400;
var orbitter:OrbitCamera = new OrbitCamera( stage, renderer.camera );
orbitter.start();
<?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:filters="flash.filters.*"
  width="400" height="400"
  backgroundColor="#000000">

<f:BitmapRenderer id="renderer" width="400" height="400">
  <f:camera>
    <f:Camera projectionDistance="400">
      <f:position>
        <geom:Vector3D x="0" y="-150" z="-400"/>
      </f:position>
      <f:target>
        <geom:Vector3D x="0" y="-150" z="0"/>
      </f:target>
      <f:controller>
        <f:OrbitCamera/>
      </f:controller>
    </f:Camera>
  </f:camera>
  <f:emitters>
    <f:Emitter id="smoke" autoStart="true">
      <f:counter>
        <f:Steady rate="10"/>
      </f:counter>
      <f:initializers>
        <f:Velocity>
          <f:ConeZone angle="0.5" height="40" truncatedHeight="30">
            <f:axis>
              <geom:Vector3D x="0" y="-1" z="0"/>
            </f:axis>
          </f:ConeZone>
        </f:Velocity>
        <f:SharedImage>
          <f:RadialDot radius="6"/>
        </f:SharedImage>
        <f:Lifetime minLifetime="11" maxLifetime="12"/>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:Age/>
        <f:LinearDrag drag="0.01"/>
        <f:ScaleImage startScale="1" endScale="15"/>
        <f:Fade startAlpha="0.15" endAlpha="0"/>
        <f:RandomDrift driftX="15" driftY="15" driftZ="15"/>
      </f:actions>
    </f:Emitter>
    <f:Emitter id="fire" autoStart="true">
      <f:counter>
        <f:Steady rate="60"/>
      </f:counter>
      <f:initializers>
        <f:Position>
          <f:DiscZone outerRadius="3">
            <f:normal>
              <geom:Vector3D x="0" y="1" z="0"/>
            </f:normal>
          </f:DiscZone>
        </f:Position>
        <f:Velocity>
          <f:DiscZone outerRadius="20">
            <f:normal>
              <geom:Vector3D x="0" y="1" z="0"/>
            </f:normal>
          </f:DiscZone>
        </f:Velocity>
        <f:SharedImage image="{new FireBlob()}"/>
        <f:Lifetime minLifetime="2" maxLifetime="3"/>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:RotateToDirection/>
        <f:Age/>
        <f:LinearDrag drag="1"/>
        <f:Accelerate x="0" y="-40" z="0"/>
        <f:ScaleImage startScale="1" endScale="1.5"/>
        <f:ColorChange startColor="{0xFFFFCC00}" endColor="0x00CC0000"/>
      </f:actions>
    </f:Emitter>
  </f:emitters>
</f:BitmapRenderer>
</s:Application>
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;
  import flash.geom.Vector3D;

  [SWF(width='400', height='400', frameRate='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var smoke:Emitter3D;
    private var fire:Emitter3D;
    private var view:View3D;
    private var renderer:A3D4Renderer;
    
    public function Main()
    {
      smoke = new Smoke();
      smoke.start( );
      
      fire = new Fire();
      fire.start( );
      
      view = new View3D();
      view.width = 400;
      view.height = 400;
      view.camera.y = 150;
      view.camera.z = 320;
      view.camera.lookAt( new Vector3D( 0, 150, 0 ) );
      addChild(view);

      var particleContainer:ObjectContainer3D = new ObjectContainer3D();
      view.scene.addChild( particleContainer );
      
      renderer = new A3D4Renderer( particleContainer );
      renderer.addEmitter( smoke );
      renderer.addEmitter( fire );
      
      addEventListener( Event.ENTER_FRAME, render, false, 0, true );
    }
    
    private function render( ev:Event ):void
    {
      // render the view
      view.render();
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.ColorChange;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.away3d.v4.initializers.A3D4DisplayObject;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RotateToDirection;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fire extends Emitter3D
  {
    public function Fire()
    {
      counter = new Steady( 60 );

      addInitializer( new Lifetime( 2, 3 ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
      addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
      addInitializer( new A3D4DisplayObject( new FireBlob(), true ) );

      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 1 ) );
      addAction( new Accelerate( new Vector3D( 0, 40, 0 ) ) );
      addAction( new ColorChange( 0xFEFFCC00, 0x00CC0000 ) );
      addAction( new ScaleImage( 1, 1.5 ) );
      addAction( new RotateToDirection() );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.displayObjects.RadialDot;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.away3d.v4.initializers.A3D4DisplayObject;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RandomDrift;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ConeZone;

  import flash.geom.Vector3D;

  public class Smoke extends Emitter3D
  {
    public function Smoke()
    {
      counter = new Steady( 10 );
      
      addInitializer( new Lifetime( 11, 12 ) );
      addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 0.5, 40, 30 ) ) );
      addInitializer( new A3D4DisplayObject( new RadialDot( 6 ), true ) );
      
      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 0.01 ) );
      addAction( new ScaleImage( 1, 15 ) );
      addAction( new Fade( 0.15, 0 ) );
      addAction( new RandomDrift( 15, 15, 15 ) );
    }
  }
}
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='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var smoke:Emitter3D;
    private var fire: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 = -150;
      camera.z = -300;

      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 );
      
      smoke = new Smoke();
      renderer.addEmitter( smoke );
      smoke.start( );
      
      fire = new Fire();
      renderer.addEmitter( fire );
      fire.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 org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.alternativa3d.initializers.Alt3DDisplayObject;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RotateToDirection;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fire extends Emitter3D
  {
    public function Fire()
    {
      counter = new Steady( 60 );

      addInitializer( new Lifetime( 2, 3 ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
      addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
      addInitializer( new Alt3DDisplayObject( new FireBlob() ) );

      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 1 ) );
      addAction( new Accelerate( new Vector3D( 0, -40, 0 ) ) );
      addAction( new Fade( 1, 0 ) );
      addAction( new ScaleImage( 1.5, 2.2 ) );
      addAction( new RotateToDirection() );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.displayObjects.RadialDot;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.alternativa3d.initializers.Alt3DDisplayObject;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RandomDrift;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ConeZone;

  import flash.geom.Vector3D;

  public class Smoke extends Emitter3D
  {
    public function Smoke()
    {
      counter = new Steady( 9 );
      
      addInitializer( new Lifetime( 11, 12 ) );
      addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, -1, 0 ), 0.5, 40, 30 ) ) );
      addInitializer( new Alt3DDisplayObject( new RadialDot( 8 ) ) );
      
      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 0.01 ) );
      addAction( new ScaleImage( 1, 15 ) );
      addAction( new Fade( 0.15, 0 ) );
      addAction( new RandomDrift( 15, 15, 15 ) );
    }
  }
}
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;
  import flash.geom.Vector3D;

  [SWF(width='400', height='400', frameRate='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var smoke:Emitter3D;
    private var fire:Emitter3D;
    private var view:View3D;
    private var renderer:A3D3Renderer;
    
    public function Main()
    {
      smoke = new Smoke();
      smoke.start( );
      
      fire = new Fire();
      fire.start( );
      
      view = new View3D({x:200,y:200});
      view.camera.y = 150;
      view.camera.z = 750;
      view.camera.lookAt( new Vector3D( 0, 150, 0 ) );
      addChild(view);
      renderer = new A3D3Renderer( view.scene );
      renderer.addEmitter( smoke );
      renderer.addEmitter( fire );
      
      addEventListener( Event.ENTER_FRAME, render, false, 0, true );
    }
    
    private function render( ev:Event ):void
    {
      // render the view
      view.render();
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.ColorChange;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.away3d.v3.initializers.A3D3DisplayObjectClass;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RotateToDirection;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fire extends Emitter3D
  {
    public function Fire()
    {
      counter = new Steady( 60 );

      addInitializer( new Lifetime( 2, 3 ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
      addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
      addInitializer( new A3D3DisplayObjectClass( FireBlob ) );

      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 1 ) );
      addAction( new Accelerate( new Vector3D( 0, 40, 0 ) ) );
      addAction( new ColorChange( 0xFFFFCC00, 0x00CC0000 ) );
      addAction( new ScaleImage( 1, 1.5 ) );
      addAction( new RotateToDirection() );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.displayObjects.RadialDot;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.away3d.v3.initializers.A3D3DisplayObjectClass;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RandomDrift;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ConeZone;

  import flash.geom.Vector3D;

  public class Smoke extends Emitter3D
  {
    public function Smoke()
    {
      counter = new Steady( 9 );
      
      addInitializer( new Lifetime( 11, 12 ) );
      addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 0.5, 40, 30 ) ) );
      addInitializer( new A3D3DisplayObjectClass( RadialDot, [6] ) );
      
      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 0.01 ) );
      addAction( new ScaleImage( 1, 15 ) );
      addAction( new Fade( 0.15, 0 ) );
      addAction( new RandomDrift( 15, 15, 15 ) );
    }
  }
}
package
{
  import org.flintparticles.integration.papervision3d.PV3DRenderer;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.papervision3d.cameras.Camera3D;
  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='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var viewport:Viewport3D;
    private var smoke:Emitter3D;
    private var fire:Emitter3D;
    private var renderer:BasicRenderEngine;
    private var flintRenderer:PV3DRenderer;
    private var scene:Scene3D;
    private var camera:Camera3D;

    public function Main()
    {
      smoke = new Smoke();
      smoke.start( );
      
      fire = new Fire();
      fire.start( );
      
      viewport = new Viewport3D( 400, 400 );
      addChild( viewport );
      
      renderer = new BasicRenderEngine();
      scene = new Scene3D();
      camera = new Camera3D();
      camera.z = -400;
      camera.y = 150;
      
      flintRenderer = new PV3DRenderer( scene );
      flintRenderer.addEmitter( smoke );
      flintRenderer.addEmitter( fire );
      
      addEventListener( Event.ENTER_FRAME, render, false, 0, true );
    }
    
    private function render( ev:Event ):void
    {
      // render the view
      renderer.renderScene( scene, camera, viewport);
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.ColorChange;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.papervision3d.initializers.PV3DDisplayObjectClass;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RotateToDirection;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fire extends Emitter3D
  {
    public function Fire()
    {
      counter = new Steady( 60 );

      addInitializer( new Lifetime( 2, 3 ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 20 ) ) );
      addInitializer( new Position( new DiscZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 3 ) ) );
      addInitializer( new PV3DDisplayObjectClass( FireBlob ) );

      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 1 ) );
      addAction( new Accelerate( new Vector3D( 0, 40, 0 ) ) );
      addAction( new ColorChange( 0xFFFFCC00, 0x00CC0000 ) );
      addAction( new ScaleImage( 1, 1.5 ) );
      addAction( new RotateToDirection() );
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.actions.Fade;
  import org.flintparticles.common.actions.ScaleImage;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.displayObjects.RadialDot;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.papervision3d.initializers.PV3DDisplayObjectClass;
  import org.flintparticles.threeD.actions.LinearDrag;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.RandomDrift;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ConeZone;

  import flash.geom.Vector3D;

  public class Smoke extends Emitter3D
  {
    public function Smoke()
    {
      counter = new Steady( 7 );
      
      addInitializer( new Lifetime( 11, 12 ) );
      addInitializer( new Velocity( new ConeZone( new Vector3D( 0, 0, 0 ), new Vector3D( 0, 1, 0 ), 0.5, 40, 30 ) ) );
      addInitializer( new PV3DDisplayObjectClass( RadialDot, 6 ) );
      
      addAction( new Age( ) );
      addAction( new Move( ) );
      addAction( new LinearDrag( 0.01 ) );
      addAction( new ScaleImage( 1, 15 ) );
      addAction( new Fade( 0.15, 0 ) );
      addAction( new RandomDrift( 15, 15, 15 ) );
    }
  }
}