package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.shaders.PhongShader; import org.papervision3d.materials.shaders.ShadedMaterial; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; [SWF(width="800", height="600", backgroundColor="#000000")] public class TutoPV3D01 extends BasicView { private var esfera:Sphere; private var luz:PointLight3D; /* en el constructor establecemos la velocidad de fotogramas por segundo, y llamamos a la función que inicializa variables */ public function TutoPV3D01 (){ stage.frameRate=42; init(); startRendering(); } /* inicializamos algunos parámetros y añadimos listeners que se ejecuten cuando se carguen las dos imágenes que se usan */ private function init():void{ luz=new PointLight3D(); luz.y = 350; luz.x = 200; luz.z = -600; scene.addChild(luz); var imgLoader:Loader=new Loader(); imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadImgComplete); imgLoader.load(new URLRequest("assets/snowwhite.jpg")); var fondoLoader:Loader=new Loader(); fondoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadFondoComplete); fondoLoader.load(new URLRequest("assets/sky.jpg")); } // cuando se cargue la imagen de fondo, la añadimos a la escena private function loadFondoComplete(e:Event):void{ var fondo:Bitmap=e.target.content as Bitmap; fondo.width=stage.width; fondo.height=stage.height; addChildAt(fondo,0); } /* Cuando se haya cargado la imagen que se usa como material para la esfera, añadimos ese material, así como un shader y un mapa de relieve */ private function loadImgComplete(e:Event):void{ var bitmap:Bitmap=e.target.content as Bitmap; var bumpmap:BitmapData=new BitmapData(bitmap.width,bitmap.height); bumpmap.perlinNoise(22,15,15,50,false,false,7,true); var bitmapMat:BitmapMaterial=new BitmapMaterial(bitmap.bitmapData); var shader:PhongShader=new PhongShader(luz,0xFF0000,0x666666,10,bumpmap); var shadeMat:ShadedMaterial=new ShadedMaterial(bitmapMat,shader); esfera=new Sphere(shadeMat,350,32,24); scene.addChild(esfera); } // rotamos la esfera en cada render override protected function onRenderTick(event:Event=null):void{ if(esfera!=null){ esfera.rotationY++; esfera.rotationX++; esfera.rotationZ--; } super.onRenderTick(); } } }