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
