
Etiquetas: Viewport3D BasicRenderEngine Scene3D Camera3D MovieMaterial MaterialList DisplayObject Viewport3D Vertex3D
////////////////////////////////////////////////////////////////////////////////////////CLASESimport org.papervision3d.view.Viewport3D;
import org.papervision3d.cameras.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.core.geom.renderables.Vertex3D
import org.papervision3d.objects.DisplayObject3D;
import flash.display.BitmapData;
////////////////////////////////////////////////////////////////////////////////////////VARIABLESvar viewport:Viewport3D;var renderer:BasicRenderEngine;var escena:Scene3D;var camara:Camera3D;var movieMaterial:MovieMaterial;var listaMateriales:MaterialsList = new MaterialsList();
var cubo:DisplayObject3D;var ref_object3D:DisplayObject3D;var count:Number = 0;
var calidad = 40;
var contador:Number = 0;
var xIni:Array = new Array();
var yIni:Array = new Array();
var zIni:Array = new Array();
stage.quality = StageQuality.LOW;
////////////////////////////////////////////////////////////////////////////////////////FUNCIONES//Esta función es la que invocamos al comenzar. Sería la constructora de la escenafunction Empezar(vpWidth:Number = 700, vpHeight:Number = 400):void {
CrearPapervision(vpWidth, vpHeight);
CrearObjetos();
Crear3D();
GuargarXIni();
CrearEventos();
}//Crea los elementos necesarios de la escena PPVfunction CrearPapervision(vpWidth:Number, vpHeight:Number):void {
//Este va a ser el "contenedor" que nos va a permitir visualizar la escena. Es el //objeto a través del cual visualizamos la escena 3D. Hay que especificarle un ancho y un alto. viewport = new Viewport3D(vpWidth, vpHeight);
addChild(viewport);
//El renderer es el objeto que se encarga de renderizar la escena. Cada vez que se produce un cambio //Hay que volver a renderizar. Esto se hace en la funcion "Renderizar". renderer = new BasicRenderEngine();
escena = new Scene3D();
camara = new Camera3D();
camara.zoom = 3
}//En esta función se añaden todos los objetos 3d a la escenafunction Crear3D():void {
escena.addChild(cubo);
}//Crea todos los objetos que queremos añadir a la escena (en este caso un cubo). function CrearObjetos() {
//Creo un material a partir de un clip que hay en el escenariovar material:MovieMaterial = new MovieMaterial( Skin_mc, true, false, false );
material.oneSide = false;
//Creo una lista de materiales para hacer el cubo a partir del material que he creado. listaMateriales = new MaterialsList();
listaMateriales.addMaterial(material,"top");
listaMateriales.addMaterial(material,"bottom");
listaMateriales.addMaterial(material,"front");
listaMateriales.addMaterial(material,"back");
listaMateriales.addMaterial(material,"left");
listaMateriales.addMaterial(material,"right");
//Creo el cubocubo = new Cube( listaMateriales, 500, 500, 500, 8, 8, 8);
}//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 fluidezfunction Mover() {
contador+= 0.5var count = 0;
for each (var vertex:Vertex3D in cubo.geometry.vertices) {
cubo.geometry.vertices[count].x = xIni[count] + (0.5-Math.sin((count + contador)/4)) * count/20
cubo.geometry.vertices[count].y = yIni[count] + (0.5-Math.sin((count + contador)/8)) * count/5
cubo.geometry.vertices[count].z = zIni[count] + (0.5-Math.sin((count + contador)/4)) * count/15
count++;
}cubo.rotationY += ((mouseX - 300) - cubo.rotationY)/9;
cubo.rotationX += ((mouseY - 300) - cubo.rotationX)/9;
}//Añade los eventos necesarios a la escena. function CrearEventos():void {
addEventListener(Event.ENTER_FRAME, Renderizar);
}//Esta función la he hecho para guardar las coordenadas iniciales de todos los puntos del //cubo que he creado para el efecto. function GuargarXIni(){
var count = 0;
for each (var vertex:Vertex3D in cubo.geometry.vertices) {
xIni.push(cubo.geometry.vertices[count].x);
yIni.push(cubo.geometry.vertices[count].y);
zIni.push(cubo.geometry.vertices[count].z);
count++;
}}//Hace los cambios necesarios en la escena a través de la función mover, y después//renderiza la escena. function Renderizar(e:Event):void {
Mover();
renderer.renderScene(escena, camara, viewport);
}//////////////////////////////////////////////////////////////////////////////////////////EmpezamosEmpezar();