Papervision easy internal classe

by MixedMilkChOcOlate
♥0 | Line 249 | Modified 2009-08-25 05:55:05 | MIT License
play

ActionScript3 source code

/**
 * Copyright MixedMilkChOcOlate ( http://wonderfl.net/user/MixedMilkChOcOlate )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3NEz
 */

package {
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.filters.BlurFilter;
    import flash.filters.ColorMatrixFilter;
    import flash.geom.Point;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.objects.primitives.Cube;
    
    
    [SWF(frameRate="30", backgroundColor="#FFFFFF", width='550', height='500')]

    public class Main extends MovieClip
    {
	private var _p_world:PaperWorld;
	private var _p_world_w_min:int = -550;
	private var _p_world_w_max:int = 550;
	private var _p_world_h_min:int = -500;
	private var _p_world_h_max:int = 500;
	private var cpt:int = 0;
		
	//filters
        private var bmd:BitmapData = new BitmapData(550, 500, true, 0x00000);
        private var bm:Bitmap = new Bitmap (bmd);
        private var bf:BlurFilter;
        private var cmf:ColorMatrixFilter;
		
	public function Main() 
	{
		this.addEventListener(Event.ENTER_FRAME, new_enter_frame);
		
                bf = new BlurFilter (8, 8, 1)
                cmf = new ColorMatrixFilter ([1, 0, 0, 0, 0,            // red
                                              0, 1, 0, 0, 0,            // green
                                              0, 0, 1, 0, 0,            // blue
                                              0, 0, 0, 0.5, 0,]);       // alpha
		// appel de la classe qui creer un environement papervision
		_p_world = new PaperWorld(_p_world_w_max, _p_world_h_max);
		this.addChild(bm);
		this.addChild(_p_world);
	}
	
	private function new_enter_frame(e:Event):void 
	{
		// apply filters
		bmd.draw(this);
		bmd.applyFilter(bmd, bmd.rect, new Point (0, 0), bf);
		bmd.applyFilter(bmd, bmd.rect, new Point (0, 0), cmf);
		bmd.scroll(0, -5); // effect goes to top
	    cpt++;
		for (var i:int = 0 ; i < _p_world.tabCubes.length ; i++) {
        		var c:Cube = _p_world.tabCubes[i];
			
			var randomMoveX:int;
			var randomMoveY:int;
			var randomMoveZ:int;
			if (c.y > 0) {
				randomMoveY = Math.random() * 30 + 20;
			}else if (c.y < 0) {
				randomMoveY = Math.random() * -30 - 20;
			}else {
				randomMoveY = Math.random() * 100 - 50;
			}
			if (c.x > 0) {
				randomMoveX = Math.random() * 30 + 20;
			}else if (c.x < 0) {
				randomMoveX = Math.random() * -30 - 20;
			}else {
				randomMoveX = Math.random() * 100 - 50;
			}
			if (c.z > 0) {
				randomMoveX = Math.random() * 30 + 20;
			}else if (c.z < 0) {
				randomMoveZ = Math.random() * -30 - 20;
			}else {
				randomMoveZ = Math.random() * 100 - 50;
			}
			c.y += randomMoveY;
			c.x += randomMoveX;
			c.x += randomMoveZ;
			
			var randomRotate:int
			if(c.rotationX == 0) {
				randomRotate = Math.random() * 40 - 20;
			}else {
				randomRotate += 10;
			}
			c.rotationZ += randomMoveZ;
			c.rotationY += randomMoveY;
			c.rotationX += randomMoveX;
		    }
		
		    if (cpt > 30) {
			_p_world.removeMaterial(_p_world.tabCubes[0], "CUBE");
		    }
		
		    var randomMoveSize:int = Math.random() * 100 + 50;
		    var randomMoveH:int = Math.random() * 100 + 50;
		    _p_world.addCube([0x232323, 0x3a3a3a, 0x565656, 0x6f6f6f, 0x878686], randomMoveSize, randomMoveSize, randomMoveSize, 8, 8, 8);
        	}
	}
}

import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.geom.Lines3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.materials.special.LineMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.view.Viewport3D;

internal class PaperWorld extends Sprite
{
	// ATTRIBUTS
	private var _viewport:Viewport3D;
	private var _scene:Scene3D;
	private var _camera:Camera3D;
	private var _renderer:BasicRenderEngine;
	
	// OBJETS
	private var _tabPlane:Array;
	private var _tabLines:Array;
	private var _tabCubes:Array;
	
	// POUR LES PARAMETRE
	private var _w:int;
	private var _h:int;
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// CONSTRUCTOR
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	public function PaperWorld(w:int, h:int) 
	{
		_w = w;
		_h = h;
		this._tabPlane = new Array();
		this._tabLines = new Array();
		this._tabCubes = new Array();
		
		// initialise papervision
		initPapervision();
	}
		
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// INITIALISATION DE PAPERVISION3D
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	private function initPapervision():void
	{
		this._viewport = new Viewport3D(_w, _h, false,true);
		this.addChild( this._viewport );
		this._scene = new Scene3D();
		this._camera = new Camera3D();
		this._renderer = new BasicRenderEngine();
		this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
		this._camera.zoom = 50;
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// ON ENTER FRAME SUR LE PLANE POUR UPDATE VISUELLE
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	private function onEnterFrame(e:Event):void 
	{
		this._renderer.renderScene ( this._scene, this._camera, this._viewport );
	}
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// OBJETS PAPERVISION3D
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// AJOUT D'UN PLANE POUR PLANE
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	public function addPlane(c:Number, _w:Number, _h:Number, _s_w:Number, _s_h:Number):void
	{
		var material:ColorMaterial = new ColorMaterial(c);
		material.interactive = true;
    	        var plane:Plane = new Plane(material, _w, _h, _s_w, _s_h);
		
		this._scene.addChild( plane );
		this._tabPlane.push(plane);
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// PLANE IMAGES
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// @param img URL
	// X / Y / W / H
	// double face
	public function addPlaneImage(url:String, _w:Number, _h:Number, _s_w:Number, _s_h:Number, b:Boolean):void 
	{
		var material:BitmapFileMaterial = new BitmapFileMaterial(url);
		material.doubleSided = b;
		material.interactive = true;
		
		var plane:Plane = new Plane(material, _w, _h, _s_w, _s_h);
		this._scene.addChild(plane);
		this._tabPlane.push(plane);
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// PLANE MOVIECLIP
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// @param img URL
	// X / Y / W / H
	// double face
	public function addPlaneMC(mc:MovieClip, _w:Number, _h:Number, _s_w:Number, _s_h:Number, b:Boolean):void 
	{
		var movieFront:MovieMaterial = new MovieMaterial(mc, true);
		movieFront.interactive = true;
		movieFront.animated = true;
		movieFront.smooth = true;
		movieFront.doubleSided = b;
		
		var plane:Plane = new Plane(movieFront, _w, _h, _s_w, _s_h);
		this._scene.addChild(plane);
		this._tabPlane.push(plane);
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//3D LINES
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// pour chaque lignes du tableau, array = [x0, y0, z0, x1, y1, z1]
	public function addLines(c:Number, size:int, tabPoint:Array):void
	{
		var lineMaterial:LineMaterial = new LineMaterial(c, size);
		var lines3d:Lines3D = new Lines3D(lineMaterial);
		
		lines3d.addNewLine(tabPoint[0], 
								tabPoint[1],
									tabPoint[2],
										tabPoint[3],
											tabPoint[4],
												tabPoint[5],
													tabPoint[6]);
		
		this._scene.addChild(lines3d);
		this._tabLines.push(lines3d);
	}
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// CUBE
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// tabFaceColour [0 = all, 1 = right, 2 = left, 3 = top, 4 = bottom]
	// widht:int, depth:int, height:int, __segmentsS:int, __segmentsT:int, __segmentsH:int
	public function addCube(tabFaceColour:Array, w:Number , d:Number ,  h:Number , sS:Number , sT:Number , sH:Number):void {
		var matList:MaterialsList = new MaterialsList();
		matList.addMaterial(new ColorMaterial(tabFaceColour[0]), "all");
		matList.addMaterial(new ColorMaterial(tabFaceColour[1]), "right");
		matList.addMaterial(new ColorMaterial(tabFaceColour[2]), "left");
		matList.addMaterial(new ColorMaterial(tabFaceColour[3]), "top");
		matList.addMaterial(new ColorMaterial(tabFaceColour[4]), "bottom");
		var cube:Cube = new Cube(matList, w, d, h, sS, sH, sT);
		scene.addChild(cube);
		
		this._tabCubes[_tabCubes.length] = cube;
	}
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// REMOVE CHILD
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// CUBE
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// tabFaceColour [0 = all, 1 = right, 2 = left, 3 = top, 4 = bottom]
	// widht:int, depth:int, height:int, __segmentsS:int, __segmentsT:int, __segmentsH:int
	public function removeMaterial(child:DisplayObject3D, t:String):void {
		scene.removeChild(child);
		if (t == "PLANE") {
			
		}else if (t == "LINE") {
			
		}else if (t == "CUBE") {
			tabCubes.splice(0, 1);
		}
	}

    /////////////////////////////////////////////////////////////////////////////////////////////////////////// GETTER AND SETTER ATTRIBUTS DE CLASSE
	public function get viewport():Viewport3D { return _viewport; }
	public function set viewport(value:Viewport3D):void 
	{
		_viewport = value;
	}
	
	public function get scene():Scene3D { return _scene; }
	public function set scene(value:Scene3D):void 
	{
		_scene = value;
	}
	
	public function get camera():Camera3D { return _camera; }
	public function set camera(value:Camera3D):void 
	{
		_camera = value;
	}
	
	public function get renderer():BasicRenderEngine { return _renderer; }
	public function set renderer(value:BasicRenderEngine):void 
	{
		_renderer = value;
	}
	
	public function get tabPlane():Array { return _tabPlane; }
	public function set tabPlane(value:Array):void 
	{
		_tabPlane = value;
	}
	
	public function get tabLines():Array { return _tabLines; }
	public function set tabLines(value:Array):void 
	{
		_tabLines = value;
	}
	
	public function get w():int { return _w; }
	public function set w(value:int):void 
	{
		_w = value;
	}
	
	public function get h():int { return _h; }
	public function set h(value:int):void 
	{
		_h = value;
	}
	
	public function get tabCubes():Array { return _tabCubes; }
	
	public function set tabCubes(value:Array):void 
	{
		_tabCubes = value;
	}
}