Fork me on GitHub

Planets

Flash required: You need version 10 or later of the free Flash player from Adobe to use this content. To download and install the free player from Adobe's web site click here.

This example shows Flint using true 3d objects as particles rendered using Stage3D. The particles are spheres, with a green/blue texture.

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='500', height='500', 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 Planets();

      view = new View3D();
      view.width = 500;
      view.height = 500;
      addChild( view );
      
      var particleContainer:ObjectContainer3D = new ObjectContainer3D();
      view.scene.addChild( particleContainer );
      particleContainer.z = -400;
      
      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.BitmapMaterial;
  import away3d.primitives.Sphere;

  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.away3d.v4.initializers.A3D4CloneObject;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.Rotate;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.RotateVelocity;
  import org.flintparticles.threeD.initializers.Rotation;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ParallelogramZone;
  import org.flintparticles.threeD.zones.PointZone;

  import flash.display.BitmapData;
  import flash.display.BitmapDataChannel;
  import flash.geom.Vector3D;

  public class Planets extends Emitter3D
  {
    public function Planets()
    {
      counter = new Steady( 70 );
      
      var bdata:BitmapData = new BitmapData( 128, 128 );
      bdata.perlinNoise( 128, 128, 12, Math.floor( Math.random() * int.MAX_VALUE ), true, true, BitmapDataChannel.BLUE | BitmapDataChannel.GREEN );
      var mat:BitmapMaterial = new BitmapMaterial( bdata, true, true, true );
      var sphere:Sphere = new Sphere( mat, 10, 12, 12 );
      addInitializer( new A3D4CloneObject( sphere, true, 400 ) );

      addInitializer( new Position( new ParallelogramZone( new Vector3D( -500, -500, 1500 ), new Vector3D( 1000, 0, 0 ), new Vector3D( 0, 1000, 0 ) ) ) );
      addInitializer( new Velocity( new PointZone( new Vector3D( 0, 0, -400 ) ) ) );
      addInitializer( new Rotation( new Vector3D(1, 1, 1), 0, 2 * Math.PI ) );
        addInitializer(new RotateVelocity( new Vector3D( 1, 0, 0 ), 0.1, 2 ) );
      addInitializer(new Lifetime( 5 ));
      
      addAction( new Move() );
      addAction( new Age() );
      addAction( new Rotate() );
    }
  }
}
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='500', height='500', 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 );

      var particleContainer:Pivot3D = new Pivot3D();
      scene.addChild( particleContainer );
      particleContainer.z = -400;
      
      emitter = new Planets();
      renderer = new F3DRenderer( particleContainer );
      renderer.addEmitter( emitter );

      emitter.start();
    }
  }
}
package
{
  import flare.core.Texture3D;
  import flare.materials.Shader3D;
  import flare.materials.filters.TextureFilter;
  import flare.primitives.Sphere;

  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.flare3d.initializers.F3DCloneObject;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.Rotate;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.RotateVelocity;
  import org.flintparticles.threeD.initializers.Rotation;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ParallelogramZone;
  import org.flintparticles.threeD.zones.PointZone;

  import flash.display.BitmapData;
  import flash.display.BitmapDataChannel;
  import flash.display.BlendMode;
  import flash.geom.Vector3D;

  public class Planets extends Emitter3D
  {
    public function Planets()
    {
      counter = new Steady( 100 );
      
      var bdata:BitmapData = new BitmapData( 128, 128 );
      bdata.perlinNoise( 128, 128, 12, Math.floor( Math.random() * int.MAX_VALUE ), true, true, BitmapDataChannel.BLUE | BitmapDataChannel.GREEN );
      var texture:Texture3D = new Texture3D( bdata );
      var shader : Shader3D = new Shader3D( "particleFilter", [ new TextureFilter( texture, 0, BlendMode.ADD ) ], false );
      shader.build();
      var sphere:Sphere = new Sphere( 'sphere', 10, 24, shader );
      addInitializer( new F3DCloneObject( sphere, true, 400 ) );
      
      addInitializer( new Position( new ParallelogramZone( new Vector3D( -500, -500, 1500 ), new Vector3D( 1000, 0, 0 ), new Vector3D( 0, 1000, 0 ) ) ) );
      addInitializer( new Velocity( new PointZone( new Vector3D( 0, 0, -400 ) ) ) );
      addInitializer( new Rotation( new Vector3D(1, 1, 1), 0, 2 * Math.PI ) );
        addInitializer( new RotateVelocity( new Vector3D( 1, 0, 0 ), 0.1, 2 ) );
      addInitializer( new Lifetime( 4 ) );
      
      addAction( new Move() );
      addAction( new Age() );
      addAction( new Rotate() );
    }
  }
}
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='500', height='500', 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 Planets();
      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.TextureMaterial;
  import alternativa.engine3d.primitives.GeoSphere;
  import alternativa.engine3d.resources.BitmapTextureResource;

  import org.flintparticles.common.actions.Age;
  import org.flintparticles.common.counters.Steady;
  import org.flintparticles.common.initializers.Lifetime;
  import org.flintparticles.integration.alternativa3d.initializers.Alt3DCloneObject;
  import org.flintparticles.threeD.actions.Move;
  import org.flintparticles.threeD.actions.Rotate;
  import org.flintparticles.threeD.emitters.Emitter3D;
  import org.flintparticles.threeD.initializers.Position;
  import org.flintparticles.threeD.initializers.RotateVelocity;
  import org.flintparticles.threeD.initializers.Rotation;
  import org.flintparticles.threeD.initializers.Velocity;
  import org.flintparticles.threeD.zones.ParallelogramZone;
  import org.flintparticles.threeD.zones.PointZone;

  import flash.display.BitmapData;
  import flash.display.BitmapDataChannel;
  import flash.geom.Vector3D;

  public class Planets extends Emitter3D
  {
    public function Planets()
    {
      counter = new Steady( 70 );

      var bitmapData : BitmapData = new BitmapData( 128, 128 );
      bitmapData.perlinNoise( 128, 128, 12, Math.floor( Math.random() * int.MAX_VALUE ), true, true, BitmapDataChannel.BLUE | BitmapDataChannel.GREEN );
      var mat : TextureMaterial = new TextureMaterial( new BitmapTextureResource( bitmapData ) );
      var sphere : GeoSphere = new GeoSphere( 10, 12, false, mat );
      addInitializer( new Alt3DCloneObject( sphere ) );

      addInitializer( new Position( new ParallelogramZone( new Vector3D( -500, -500, 1500 ), new Vector3D( 1000, 0, 0 ), new Vector3D( 0, 1000, 0 ) ) ) );
      addInitializer( new Velocity( new PointZone( new Vector3D( 0, 0, -400 ) ) ) );
      addInitializer( new Rotation( new Vector3D( 1, 1, 1 ), 0, 2 * Math.PI ) );
      addInitializer( new RotateVelocity( new Vector3D( 1, 0, 0 ), 0.1, 2 ) );
      addInitializer( new Lifetime( 5 ) );

      addAction( new Move() );
      addAction( new Age() );
      addAction( new Rotate() );
    }
  }
}