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,0,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++;
}
super.onRenderTick();
}
}