/** * Author: xleon, http://www.xinterface.net (malandro@gmail.com) */ package { import flash.display.Sprite; import flash.events.Event; import org.papervision3d.cameras.Camera3D; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; // meta datos para el swf resultante: [SWF(frameRate="31", width="500", height="400", backgroundColor="0xffffff")] public class Sample1 extends Sprite { private var viewport:Viewport3D; // existe más de un tipo de renderizado, este es el mas comun private var renderer:BasicRenderEngine; private var scene:Scene3D; /* existe mas de un tipo de camara, con este tipo nos aseguramos de que siempre apunte hacia un target determinado, que si no se especifica, sera nuestra escena */ private var camera:Camera3D; // constructor public function Sample1() { // En este caso solo nos hace falta iniciar el 3D Init3D(); } /* este metodo inicializa todo lo relacionado con nuestro entorno 3D */ private function Init3D():void { /* creamos el viewport y lo añadimos al displayList Si queremos que algun elemento de la escena sea interactivo o se pueda clicar en el, el parametro @interactive (el cuarto) debe ser "true" */ viewport = new Viewport3D(500, 350, true, true); addChild(viewport); renderer = new BasicRenderEngine; scene = new Scene3D; camera = new Camera3D; // configuracion de la camara camera.focus = 25; camera.zoom = 10; camera.z = -500; camera.y = 300; camera.x = 0; CreateObjects(); addEventListener(Event.ENTER_FRAME, Loop3D); } /* esta función se encarga de crear y configurar los objetos de nuestra escena y los incluye en ella */ private function CreateObjects():void { // Creamos un material con dos caras iguales: var mat:WireframeMaterial = new WireframeMaterial; mat.doubleSided = true; // Creamos un plano con el material anterior: var plane:Plane = new Plane(mat, 500, 500, 8, 8); plane.rotationX = -90; // lo añadimos a la escena scene.addChild(plane); camera.target = plane; } private function Loop3D(event:Event):void { /* Aquí añadimos movimientos de piezas, de camara, y toda la interactividad y comportamientos. Para que los cambios tengan efecto visualmente deberemos finalmente renderizar la escena */ /* Creamos un movimiento de cámara circular que rodee nuestra escena Podemos controlar la distancia con el valor del radio */ var radio:uint = 500; var angulo:Number = mouseX + (stage.stageWidth / 2); camera.x = radio * Math.cos(angulo / 100); camera.z = radio * Math.sin(angulo / 100); camera.y = - mouseY + (stage.stageHeight / 2) + 100; Render(); } /* este metodo es generico y no hará falta modificarlo si mantenemos la estructura */ private function Render():void { renderer.renderScene(scene, camera, viewport); } } }