Buenas a todos, les comento que estoy metiendome un poco en el mundo de Papervision3D y estoy teniendo problemas a la hora de asignarle un ShadedMaterial con una luz a un objeto Collada que cargo.

Les dejo el codigo, lo raro es que el material lo carga bien, pero no se ve afectado por ninguna luz...

Código ActionScript :

package{
   ///
   import jespana.papervision3d.PaperBase;
   ///
   import flash.events.KeyboardEvent;
   import flash.events.MouseEvent;
   ///
   import flash.text.*;
   ///
   import org.papervision3d.cameras.Camera3D;
   import org.papervision3d.objects.primitives.Plane;
   import org.papervision3d.materials.BitmapFileMaterial;
   import org.papervision3d.objects.parsers.Collada;
   import org.papervision3d.materials.utils.MaterialsList;
   ///
   import org.papervision3d.events.FileLoadEvent;
   ///
   import org.papervision3d.lights.PointLight3D;
   import org.papervision3d.materials.shaders.*;
   import org.papervision3d.materials.shadematerials.*;
   ///
   [SWF(width="800", height="600", frameRate="30", backgroundColor="#FFFFFF")]
   ///
   public class plano_collada extends PaperBase{
      ///
      public var camera:Camera3D;
      private var collada:Collada;
      private var bitmapFileMaterial:BitmapFileMaterial;
      private var gouraud:GouraudMaterial;
      private var light:PointLight3D;
      ///
      // Key movement
      ///
      public var wdown:Boolean = false;
      public var adown:Boolean = false;
      public var sdown:Boolean = false;
      public var ddown:Boolean = false;
      ///
      // Mouse movement
      ///
      private var cameraPitch:Number = 90;
      private var cameraYaw:Number = 270;
      private var isOrbiting:Boolean = false;
      private var previousMouseX:Number;
      private var previousMouseY:Number;
      ///
      // Preloader
      ///
      public var txt:TextField = new TextField();
      ///
      public function plano_collada(){
         ///
         init();
         addCollada();
         ///
         // Key movement
         ///
         stage.addEventListener(KeyboardEvent.KEY_DOWN, pressKey);
         stage.addEventListener(KeyboardEvent.KEY_UP, releaseKey);
         ///
         // Mouse movement
         ///
         stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseClick);
         stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoving);
         stage.addEventListener(MouseEvent.MOUSE_UP, mouseRelease);
         stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel);
      }

      /*----------------------- KEY MOVEMENT -----------------------*/
      /*----------------------- KEY MOVEMENT -----------------------*/
      /*----------------------- KEY MOVEMENT -----------------------*/
      /*----------------------- KEY MOVEMENT -----------------------*/
      /*----------------------- KEY MOVEMENT -----------------------*/
      /*----------------------- KEY MOVEMENT -----------------------*/

      public function pressKey(event:KeyboardEvent):void{
         ///
         // Keyboard codes
         // W: 87
         // A: 65
         // S: 83
         // D: 68
         ///
         switch(event.keyCode){
            case 87:
               wdown = true;
            break;
            case 65:
               adown = true;
            break;
            case 83:
               sdown = true;
            break;
            case 68:
               ddown = true;
            break;
         }
      }
      ///
      public function releaseKey(event:KeyboardEvent):void{
         ///
         switch(event.keyCode){
            case 87:
               wdown = false;
            break;
            case 65:
               adown = false;
            break;
            case 83:
               sdown = false;
            break;
            case 68:
               ddown = false;
            break;
         }
      }

      /*----------------------- MOUSE MOVEMENT -----------------------*/
      /*----------------------- MOUSE MOVEMENT -----------------------*/
      /*----------------------- MOUSE MOVEMENT -----------------------*/
      /*----------------------- MOUSE MOVEMENT -----------------------*/
      /*----------------------- MOUSE MOVEMENT -----------------------*/
      /*----------------------- MOUSE MOVEMENT -----------------------*/

      private function mouseWheel(event:MouseEvent):void{
         ///
         camera.moveForward(10 * event.delta);
      }
 
      private function mouseClick(event:MouseEvent):void{
         ///
         isOrbiting = true;
         previousMouseX = event.stageX;
         previousMouseY = event.stageY;
      }
 
      private function mouseRelease(event:MouseEvent):void{
         ///
         isOrbiting = false;
      }
 
      private function mouseMoving(event:MouseEvent):void{
         ///
         var differenceX:Number = event.stageX - previousMouseX;
         var differenceY:Number = event.stageY - previousMouseY;
          ///
         if(isOrbiting){
            ///
            cameraPitch += differenceY;
            cameraYaw += differenceX;
             ///
            cameraPitch %= 360;
            cameraYaw %= 360;
             ///
            cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001;
            cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999;
             ///
            previousMouseX = event.stageX;
            previousMouseY = event.stageY;
             ///
            camera.orbit(cameraPitch, cameraYaw);
            light.position = camera.position;
         }
      }

      /*----------------------- START SCENE -----------------------*/
      /*----------------------- START SCENE -----------------------*/
      /*----------------------- START SCENE -----------------------*/
      /*----------------------- START SCENE -----------------------*/
      /*----------------------- START SCENE -----------------------*/
      /*----------------------- START SCENE -----------------------*/

      override protected function init2d():void{
         ///
         var font:myFont = new myFont();
         ///
         var txt_fmt:TextFormat = new TextFormat();
         txt_fmt.font = font.fontName;
         txt_fmt.size = 24;
         ///
         txt.autoSize = TextFieldAutoSize.CENTER;
         txt.defaultTextFormat = txt_fmt;
         txt.embedFonts = true;
         txt.text = "CARGADO 0%";
         txt.x = 10;
         txt.y = 10;
         ///txt.rotation = 45;
         txt.selectable = false;
         ///
         addChild(txt);
      }

      override protected function init3d():void{
         ///
         // Initiate 3d
         ///
         camera = new Camera3D();
         camera.zoom = 1;
         camera.focus = 500;
         camera.moveUp(400);
         current_camera = camera;
         ///
         for(var x:Number=0; x<4; x++){
            ///
            for(var y:Number=0; y<4; y++){
               ///
               var p:Plane = new Plane(new BitmapFileMaterial("assets/plano.jpg"), 1000, 1000, 1, 1);
               ///
               p.pitch(90);
               p.x = (x * 1000)-2000;
               p.z = (y * 1000)-2000;
               ///
               default_scene.addChild(p);
            }
         }
      }

      /*----------------------- CREATE & ADD COLLADA -----------------------*/
      /*----------------------- CREATE & ADD COLLADA -----------------------*/
      /*----------------------- CREATE & ADD COLLADA -----------------------*/
      /*----------------------- CREATE & ADD COLLADA -----------------------*/
      /*----------------------- CREATE & ADD COLLADA -----------------------*/
      /*----------------------- CREATE & ADD COLLADA -----------------------*/

      private function addCollada():void{
         ///
         light = new PointLight3D(true);
         //light.z = -800;
         //light.y = 300;
         ///
         var shader:GouraudShader = new GouraudShader(light,0xffffff,0x222222);
         var shadeMat:ShadedMaterial = new ShadedMaterial(new BitmapFileMaterial("assets/Rectangle2CompleteMap.png"),shader);
         ///
         var materialsList:MaterialsList = new MaterialsList(); 
         materialsList.addMaterial(shadeMat,"baked_wire_028028177");
         ///
         collada = new Collada("assets/skate.dae", materialsList);
         ///
         collada.addEventListener(FileLoadEvent.LOAD_COMPLETE, onComplete);
         collada.addEventListener(FileLoadEvent.LOAD_PROGRESS, onProgress);
         ///
         default_scene.addChild(collada);
         ///
         collada.x -= 500;
         collada.y -= 3500;
         collada.z -= 4750;
      }

      /*----------------------- COLLADA EVENTS -----------------------*/
      /*----------------------- COLLADA EVENTS -----------------------*/
      /*----------------------- COLLADA EVENTS -----------------------*/
      /*----------------------- COLLADA EVENTS -----------------------*/
      /*----------------------- COLLADA EVENTS -----------------------*/
      /*----------------------- COLLADA EVENTS -----------------------*/

      private function onComplete(event:FileLoadEvent):void{
         ///
         txt.text = "CARGADO 100%";
      }

      private function onProgress(event:FileLoadEvent):void{
         ///
         txt.text = "CARGADO " + Math.round((event.bytesLoaded / event.bytesTotal) * 100) + "%";
      } 

      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/
      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/
      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/
      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/
      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/
      /*----------------------- onEnterFrame FUNCTION ADDS -----------------------*/

      override protected function processFrame():void{
         ///
         // Process Frame Here
         ///
         if(wdown){camera.moveForward(60);}
         ///
         if(sdown){camera.moveBackward(60);}
         ///
         if(adown){camera.yaw(-8);}
         ///
         if(ddown){camera.yaw(8);}
      }
   }
}


El archivo PaperBase.as que se carga es el siguiente (modelo para hacer los pv3d):

Código ActionScript :

package jespana.papervision3d{
   ///
   import flash.display.Sprite;
   import flash.events.Event;
   ///
   import org.papervision3d.core.proto.CameraObject3D;
   import org.papervision3d.view.Viewport3D;
   import org.papervision3d.cameras.*;
   import org.papervision3d.scenes.Scene3D;
   import org.papervision3d.render.BasicRenderEngine;
   ///
   public class PaperBase extends Sprite{
      ///
      public var viewport:Viewport3D;
      public var renderer:BasicRenderEngine;
      ///
      public var current_scene:Scene3D;
      public var current_camera:CameraObject3D;
      public var current_viewport:Viewport3D;
      ///
      public var default_scene:Scene3D; // La escena
      ///
      public var default_camera:Camera3D; // La camara
      ///
      public function init(vpWidth:Number = 800, vpHeight:Number = 600):void{
         ///
         initPapervision(vpWidth, vpHeight); // Inicializo el Papervision3D
         ///
         init3d(); // Inicializo el mundo 3D
         init2d(); // Inicializo el mundo 2D
         ///
         initEvents();
      }
      ///
      protected function initPapervision(vpWidth:Number, vpHeight:Number):void{
         ///
         if(vpWidth == 0){
            ///
            viewport = new Viewport3D(stage.width, stage.height, true, true);
         }
         else{
            ///
            viewport = new Viewport3D(vpWidth, vpHeight, false, true);
         }
         ///
         addChild(viewport); // Agrego el Viewport al Stage (sino no veo nada)
         ///
         // Inicializo todo
         ///
         renderer = new BasicRenderEngine();
         default_scene = new Scene3D();
         default_camera = new Camera3D();
         ///
         current_camera = default_camera;
         current_scene = default_scene;
         current_viewport = viewport;
      }
      ///
      protected function init3d():void {
         ///
      }
      ///
      protected function init2d():void {
         ///
      }
      ///
      protected function initEvents():void {
         ///
         addEventListener(Event.ENTER_FRAME, onEnterFrame);
      }
      ///
      protected function processFrame():void {
         ///
      }
      ///
      protected function onEnterFrame( ThisEvent:Event ):void {
         ///
         processFrame();
         renderer.renderScene(current_scene, current_camera, current_viewport);
      }
   }
}


Si quieren bajar y mirar los archivos lo pueden hacer desde este vinculo:

http://www.javierespana.com/uploads/test_14.zip
http://www.javierespana.com/uploads/PaperBase.as

Muchas gracias por la ayuda, me tiene trabado este tema y no quiero seguir teniendo agujeros en el medio...

Saludos,

Javier