
Etiquetas: InteractiveScene3D FreeCamera3D VERBOSE InteractiveColorMaterial InteractiveScene3DEvent renderCamera
//Importo las clases necesarias//Clases de Flashimport flash.display.*;
import flash.events.*;
//Clases de Papervisionimport org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.scenes.*;
import org.papervision3d.materials.*;
import org.papervision3d.utils.*;
import org.papervision3d.events.*;
import org.papervision3d.core.*;
import org.papervision3d.Papervision3D;
//Declaro variablesvar contenedor :Sprite;var scene :InteractiveScene3D;var camera :FreeCamera3D;
var AnchoEscenario = 700;
var AltoEscenario = 400;
var XCamara = 0;
var YCamara = 0;
var ZCamara = -2500;
function Empezar(){
CrearEscenario();
ConstruirMenu();
PonerDobleClick();
}//Crea el contenedor para los elementos 3Dfunction CrearEscenario(){
//Quito los traces que hace PPV al crear cada elementoPapervision3D.VERBOSE = false;
//Creo y centro el contenedorcontenedor = new Sprite();
contenedor.x = AnchoEscenario/2;
contenedor.y = AltoEscenario/2;
contenedor.name = "contenedor";
addChild( contenedor );
//Creo la escenascene = new InteractiveScene3D(contenedor);
//Creo la camara y añado un listener a la escena para que "refresque" la cámara. camera = new FreeCamera3D();
camera.z = ZCamara;
camera.x = XCamara;
camera.y = YCamara;
camera.zoom = 10;
addEventListener(Event.ENTER_FRAME,Renderizar);
}//Añade la el evento doble click al escenario, y cuando el usuario lo reproduci llama a la función//cerrar, que aleja la cámara de las fichasfunction PonerDobleClick():void{
stage.doubleClickEnabled = true;
stage.addEventListener(MouseEvent.DOUBLE_CLICK,Cerrar);
}//Crea 100 planos interactivos de colores y los sitúa aleatoriamente en el escenariofunction ConstruirMenu():void{
for(var i = 0; i < 100; i++){
//El material tiene que ser de tipo interactivo. También hay InteractiveMovieMaterial, etcvar material:InteractiveColorMaterial = new InteractiveColorMaterial(Math.random() * 0xffffff);
var plane:DisplayObject3D = new Plane( material, 50, 50, 1, 1);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, MoverCamara);
plane.x = Math.random() * 400 - 200;;
plane.y = Math.random() * 400 - 200;
plane.z = -1500 + Math.random() * 400;
scene.addChild( plane );
i++;
}}//Cambia el destino de la cámara para mostrar el objeto clicadofunction MoverCamara(event:InteractiveScene3DEvent):void{
ZCamara = event.target.z-200;
YCamara = event.target.y;
XCamara = event.target.x;
}//Al llamar a la funcrion cerrar la camara vuelve al sitio inicialfunction Cerrar(event:MouseEvent):void{
XCamara = 0; YCamara = 0; ZCamara = -2500;}//Refresca la escena 3D y mueve la cámara a su posición finalfunction Renderizar(event:Event):void{
camera.x += (XCamara - camera.x)/10;
camera.y += (YCamara - camera.y)/10;
camera.z +=(ZCamara - camera.z)/10;
scene.renderCamera(camera);
}//EmpezamosEmpezar();
stop();
@Edwin: Es un ejemplo de Papervision.
@Verónica: Gracias a ti Verónica.