//////////////////////////////////////////////////////////////////////////////
//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();
|