Experimento: APE + Papervision

Este es mi primer experimento con APE + Papervision. Puedes ver el resultado a pantalla completa aquí.

//////////////////////////////////////////////////////////////////////////////
//CLASES
 
//APE
import org.cove.ape.*;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.display.Sprite;
 
//PPV
import org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.objects.DisplayObject3D;
 
//FLASH
import flash.display.BitmapData;
 
//////////////////////////////////////////////////////////////////////////////
//VARIABLES
 
//PPV
var material:MovieMaterial = new MovieMaterial( Material1_mc);
var viewport:Viewport3D;
var renderer:BasicRenderEngine;
var escena:Scene3D;
var camara:FreeCamera3D;
var movieMaterial:MovieMaterial;
var listaMateriales:MaterialsList = new MaterialsList({all:material});
var ref_object3D:DisplayObject3D;
var profEscena:Number = 100;
 
//APE
var grupoColisiones:Group;
 
//FLASH
var matAPE:Array = new Array();
var matPPV:Array = new Array();
stage.quality = StageQuality.LOW;
 
//////////////////////////////////////////////////////////////////////////////
//FUNCIONES
//Inicializa la escena
function Empezar() {
	//FLASH
	CrearFPS();
 
	//PPV
	CrearPapervision(1000, 600);
	CrearEventos();
 
	//APE
	CrearAPE();
	CrearEscenarioAPE();
 
	addEventListener(Event.ENTER_FRAME, Renderizar);
}
 
function CrearFPS() {
	var FPS = new FrameRate();
	FPS.setColor(0xffffff);
	addChild(FPS);
}
 
//Crea el escenario APE
function CrearAPE() {
	APEngine.init(1/4);
	var contenedor:MovieClip = new MovieClip();
	APEngine.container = contenedor;
	contenedor.alpha = 0;
	addChild(contenedor);
	APEngine.addForce(new VectorForce(false,0,2));
	grupoColisiones = new Group();
	APEngine.addGroup(grupoColisiones);
	grupoColisiones.collideInternal = true;
}
 
function CrearPapervision(vpWidth:Number, vpHeight:Number):void {
	viewport = new Viewport3D(vpWidth, vpHeight);
	addChild(viewport);
	renderer = new BasicRenderEngine();
	escena = new Scene3D();
	camara = new FreeCamera3D();
	camara.zoom = 4;
	camara.x = -400;
	camara.y = -150;
}
 
//En esta función se realizan los movimientos de objetos de la escena antes de renderizar.
//En este caso muevo todos los vertices del cubo para generar el efecto de fluidez
function MoverPPV() {
	for(var i = 0; i < matAPE.length; i++){
		if(matAPE[i].py > 1000){
			matAPE[i].py =-200;
			matAPE[i].px = Math.random() * 400 +150;
		}
		matPPV[i].x =-matAPE[i].px
		matPPV[i].y =-matAPE[i].py
	}
	camara.z = Math.cos(mouseX/300) * 150- 500;
}
 
//Añade los eventos necesarios a la escena.
function CrearEventos():void {
	addEventListener(Event.ENTER_FRAME, Renderizar);
}
 
//Crea los elementos del escenario
function CrearEscenarioAPE() {
	//Creo un suelo y dos paredes
	CrearRectangulo(400,400,350,100,Math.PI,true,1,0.1,0);
	CrearRectangulo(400,50,10,200,Math.PI/4,true,1,0.1,0);
 
	CrearRectangulo(200,200,10,200,-Math.PI/4,true,1,0.1,0);
	CrearRectangulo(600,150,10,200,5*Math.PI/4,true,1,0.1,0);
	//Creo un Timer para que cree circulos de tamaño aleatorio (se va a ejecutar 100 veces, una cada 500 ms)
	var tiempo = new Timer(500,50);
	tiempo.addEventListener("timer",Circulo);
	function Circulo(event:TimerEvent):void {
		CrearCirculo(Math.random() * 400 +150,-200 ,Math.random() * 30 + 5 ,false,1,0.5,0);
	}
	tiempo.start();
}
 
function CrearRectangulo(X,Y,ancho,alto,rot,est,masa,ela,fri) {
	var rp:RectangleParticle = new RectangleParticle(X,Y,ancho,alto,rot,est,masa,ela,fri);
	grupoColisiones.addParticle(rp);
 
	var cubo =  new Cube( listaMateriales, ancho, profEscena,alto , 2, 2, 2);
	cubo.x = -X;
	cubo.y = -Y;
	cubo.rotationZ = rot*(180/Math.PI);
	escena.addChild(cubo);
}
 
function CrearCirculo(X,Y,radio,est,masa,ela,fri) {
	var circ = new CircleParticle(X,Y,radio,est,masa,ela,fri);
	matAPE.push(circ);
	grupoColisiones.addParticle(circ);
 
	var esf:Sphere = new Sphere(material,radio,6,6);
	matPPV.push(esf);
	escena.addChild(esf);
}
 
//Ejecuta el APEngine en cada enterFrame
function MoverAPE():void {
	APEngine.step();
	//APEngine.paint();
}
 
function Renderizar(e:Event):void {
	MoverAPE();
	MoverPPV();
	renderer.renderScene(escena, camara, viewport);
}
//Empezamos
Empezar();

Comentarios:
No hay comentarios
Dejar un comentario:
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web: