Planets
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() );
}
}
}