Fountain

Rendering pixel particles in 3D.

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

  import flash.display.Sprite;
  import flash.filters.BlurFilter;
  import flash.filters.ColorMatrixFilter;
  import flash.geom.Rectangle;
  import flash.geom.Vector3D;

  [SWF(width='500', height='500', frameRate='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var emitter:Emitter3D;
    private var renderer:PixelRenderer;
    private var orbitter:OrbitCamera;
    
    public function Main()
    {
      emitter = new Fountain();
      
      renderer = new PixelRenderer( new Rectangle( -250, -250, 500, 500 ), false );
      renderer.camera.dolly( -300 );
      renderer.camera.lift( 100 );
      renderer.camera.target = new Vector3D( 0, -100, 0 );
      renderer.addFilter( new BlurFilter( 2, 2, 1 ), true );
      renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.99,0 ] ), true );
      renderer.addEmitter( emitter );
      renderer.x = 250;
      renderer.y = 250;
      addChild( renderer );
      
      emitter.start( );
      
      orbitter = new OrbitCamera( stage, renderer.camera );
      orbitter.start();
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.ColorInit;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fountain extends Emitter3D
  {
    public function Fountain()
    {
      counter = new Steady( 2500 );
      
      addInitializer( new ColorInit( 0xFFCCCCFF, 0xFF6666FF ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, -250, 0 ), new Vector3D( 0, 1, 0 ), 60 ) ) );
      addInitializer( new Lifetime( 3.2 ) );
      
      addAction( new Move() );
      addAction( new Accelerate( new Vector3D( 0, 150, 0 ) ) );
      addAction( new Age() );
    }
  }
}
import org.flintparticles.common.actions.*;
import org.flintparticles.common.counters.*;
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.PixelRenderer;
import org.flintparticles.threeD.renderers.controllers.*;
import org.flintparticles.threeD.zones.*;  

var emitter:Emitter3D = new Emitter3D();
emitter.counter = new Steady( 2500 );

emitter.addInitializer( new ColorInit( 0xFFCCCCFF, 0xFF6666FF ) );
emitter.addInitializer( new Velocity( new DiscZone( new Vector3D( 0, -250, 0 ), new Vector3D( 0, 1, 0 ), 60 ) ) );
emitter.addInitializer( new Lifetime( 3.2 ) );

emitter.addAction( new Move() );
emitter.addAction( new Accelerate( new Vector3D( 0, 150, 0 ) ) );
emitter.addAction( new Age() );

var renderer:PixelRenderer = new PixelRenderer( new Rectangle( -250, -250, 500, 500 ), false );
renderer.camera.dolly( -300 );
renderer.camera.lift( 100 );
renderer.camera.target = new Vector3D( 0, -100, 0 );
renderer.addFilter( new BlurFilter( 2, 2, 1 ), true );
renderer.addFilter( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.99,0 ] ), true );
renderer.addEmitter( emitter );
renderer.x = 250;
renderer.y = 250;
addChild( renderer );

emitter.start( );

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="500" height="500"
  backgroundColor="#000000">

<f:PixelRenderer id="renderer" width="500" height="500">
  <f:camera>
    <f:Camera>
      <f:position>
        <geom:Vector3D x="0" y="-100" z="-300"/>
      </f:position>
      <f:target>
        <geom:Vector3D x="0" y="-100" z="0"/>
      </f:target>
      <f:controller>
        <f:OrbitCamera/>
      </f:controller>
    </f:Camera>
  </f:camera>
  <f:postFilters>
    <filters:BlurFilter blurX="2" blurY="2" quality="1"/>
    <filters:ColorMatrixFilter matrix="{[ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.99,0 ]}"/>
  </f:postFilters>
  <f:emitters>
    <f:Emitter id="emitter" autoStart="true">
      <f:counter>
        <f:Steady rate="2500"/>
      </f:counter>
      <f:initializers>
        <f:Velocity>
          <f:DiscZone innerRadius="0" outerRadius="60">
            <f:center>
              <geom:Vector3D x="0" y="-250" z="0"/>
            </f:center>
            <f:normal>
              <geom:Vector3D x="0" y="1" z="0"/>
            </f:normal>
          </f:DiscZone>
        </f:Velocity>
        <f:ColorInit minColor="0xFFCCCCFF" maxColor="0xFF6666FF"/>
        <f:Lifetime lifetime="3.2"/>
      </f:initializers>
      <f:actions>
        <f:Move/>
        <f:Age/>
        <f:Accelerate x="0" y="150" z="0" />
      </f:actions>
    </f:Emitter>
  </f:emitters>
</f:PixelRenderer>
</s:Application>
package
{
  import org.flintparticles.integration.papervision3d.PV3DPixelRenderer;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.papervision3d.cameras.Camera3D;
  import org.papervision3d.core.effects.BitmapLayerEffect;
  import org.papervision3d.core.geom.Pixels;
  import org.papervision3d.render.BasicRenderEngine;
  import org.papervision3d.scenes.Scene3D;
  import org.papervision3d.view.Viewport3D;
  import org.papervision3d.view.layer.BitmapEffectLayer;

  import flash.display.Sprite;
  import flash.events.Event;
  import flash.filters.BlurFilter;
  import flash.filters.ColorMatrixFilter;

  [SWF(width='500', height='500', frameRate='61', backgroundColor='#000000')]
  
  public class Main extends Sprite
  {
    private var viewport:Viewport3D;
    private var emitter:Emitter3D;
    private var pv3dRenderer:BasicRenderEngine;
    private var flintRenderer:PV3DPixelRenderer;
    private var scene:Scene3D;
    private var camera:Camera3D;
    private var bfx:BitmapEffectLayer;
    private var pixels:Pixels;
    
    public function Main()
    {
      viewport = new Viewport3D( 500, 500 );
      addChild( viewport );
      
      pv3dRenderer = new BasicRenderEngine();
      scene = new Scene3D();
      camera = new Camera3D();
      camera.z = -300;
      
      bfx = new BitmapEffectLayer( viewport, 500, 500 );
      viewport.containerSprite.addLayer( bfx );
      pixels = new Pixels( bfx );
      bfx.addDisplayObject3D( pixels );
      scene.addChild( pixels );
      bfx.addEffect( new BitmapLayerEffect( new BlurFilter( 2, 2, 1 ) ) );
      bfx.addEffect( new BitmapLayerEffect( new ColorMatrixFilter( [ 1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0.99,0 ] ) ) );
      
      emitter = new Fountain();
      emitter.position.y = -100;

      flintRenderer = new PV3DPixelRenderer( pixels );
      flintRenderer.addEmitter( emitter );
      emitter.start();
      
      addEventListener( Event.ENTER_FRAME, render, false, 0, true );
    }
    
    private function render( ev:Event ):void
    {
      // render the view
      pv3dRenderer.renderScene( scene, camera, viewport);
    }
  }
}
package
{
  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.ColorInit;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.threeD.actions.Accelerate;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.DiscZone;

  import flash.geom.Vector3D;

  public class Fountain extends Emitter3D
  {
    public function Fountain()
    {
      counter = new Steady( 2500 );
      
      addInitializer( new ColorInit( 0xFFCCCCFF, 0xFF6666FF ) );
      addInitializer( new Velocity( new DiscZone( new Vector3D( 0, 250, 0 ), new Vector3D( 0, 1, 0 ), 60 ) ) );
      addInitializer( new Lifetime( 3.2 ) );
      
      addAction( new Move() );
      addAction( new Accelerate( new Vector3D( 0, -150, 0 ) ) );
      addAction( new Age() );
    }
  }
}