Ich habe schon versucht das script von
codejockey umzuarbeiten allerdings komme ich nicht auf den trichter...
Es will das DisplayObject3D in der getColladaDisplayObj() nicht finden.
hier mein code, nicht erschrecken

:
PHP-Code:
package Main {
import com.adobe.utils.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import com.flashmoto.gallery.Gallery;
import gs.TweenMax;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.parsers.Collada;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.ColorMaterial;
public class logo extends Sprite
{
private var PointLight :PointLight3D; //A light will be needed for the GouraudShader. The light is used to determine the source of light, duh.
private var flatShadeMaterial :FlatShadeMaterial;
private var viewport :Viewport3D;
private var scene :Scene3D;
private var camera :Camera3D;
private var renderer :BasicRenderEngine;
private var dae1 :Collada;
private var dae2 :Collada;
private var dae3 :Collada;
private var dae4 :Collada;
private var colormaterial :ColorMaterial;
public function logo()
{
init3D();
stage.addEventListener(Event.ENTER_FRAME, renderTick);
}
private function init3D():void {
/* *************************************** */
/* Make sure you set viewport interactive */
/* property to true!!!!!!!!!!! */
/* *************************************** */
viewport = new Viewport3D(950, 600, false, true, true, true);
this.addChild(viewport);
scene = new Scene3D();
camera = new Camera3D();
// let's back the camera up a little so we're not inside the Logo (yuck!)
camera.z = -2020;
camera.y = 0;
camera.zoom = 10;
camera.focus = 1000;
renderer = new BasicRenderEngine();
// bitmap grafik
/* var mList = new MaterialsList();
var mtl3:BitmapFileMaterial = new BitmapFileMaterial("sides.jpg");
mList.addMaterial(mtl3, "ERDefaultMaterial");
*/
PointLight = new PointLight3D(true);
PointLight.z = -1500;
flatShadeMaterial = new FlatShadeMaterial(PointLight, 0x555555, 0x111111);
colormaterial = new ColorMaterial(0x44444);
var ml : MaterialsList = new MaterialsList();
ml.addMaterial(colormaterial, "ERDefaultMaterial");
var dae1 : Collada = new Collada("test.dae",ml, 0.1);
var dae2 : Collada = new Collada("work.dae" ,ml, 0.1);
var dae3 : Collada = new Collada("news.dae" ,ml, 0.1);
var dae4 : Collada = new Collada("about.dae" ,ml, 0.1);
dae1.y = 20;
dae2.y = 30;
dae3.y = 60;
dae4.y = 90;
scene.addChild(dae1);
scene.addChild(dae2);
scene.addChild(dae3);
scene.addChild(dae4);
// before we can add event listeners we need to make sure the
// object is instantiated completely
dae1.addEventListener(FileLoadEvent.LOAD_COMPLETE, handleColladaComplete);
}
/* ************************************** */
/* Event Handlers */
/* ************************************** */
private function renderTick(event:Event):void {
PointLight.x = (mouseX - 250) * 5; //setting the x / y position of the light gives us dynamic lighting.
PointLight.y = -((mouseY - 150) * 5);
//dae.rotationY = (mouseY - mouseX) * 1.1;
//dae.rotationX = (mouseX - mouseY) * 1.1;
renderer.renderScene(scene, camera, viewport);
}
private function handleLogoOver(event:InteractiveScene3DEvent):void {
trace( "over" );
trace(this);
viewport.containerSprite.buttonMode = true;
//var logoLayer:ViewportLayer = viewport.getChildLayer(dae, true, true);
viewport.getChildLayer(dae1).filters = null;
//this._daes[.filters = [new GlowFilter(0xFFFFFF, .51, 50, 6, 1, 3, false, false)];
//TweenMax.to(logoLayer, 1, {alpha:"0.3", overwrite:0});
}
private function handleLogoOut(event:InteractiveScene3DEvent):void {
trace( "out" );
viewport.containerSprite.buttonMode = false;
//var logoLayer:ViewportLayer = viewport.getChildLayer(dae, true, true);
//logoLayer.filters = null;
viewport.getChildLayer(dae1).filters = [new BlurFilter(2, 2, 1)];
//TweenMax.to(logoLayer, 1, {alpha:"1", overwrite:0});
}
private function handleLogoClick(event:InteractiveScene3DEvent):void {
trace( "click" );
if (!TweenMax.isTweening(dae1)) {
var gallery:Gallery = new Gallery();
addChild(gallery);
//TweenMax.to(dae, 1, {rotationY:"60", overwrite:0});
//TweenMax.to(camera, 1, {zoom:"40", overwrite:0});
}
}
private function handleColladaComplete(event:FileLoadEvent):void {
// here's where we set the interactivity
var listenerObj1:DisplayObject3D = getColladaDisplayObj(dae1);
var listenerObj2:DisplayObject3D = getColladaDisplayObj(dae2);
var listenerObj3:DisplayObject3D = getColladaDisplayObj(dae3);
var listenerObj4:DisplayObject3D = getColladaDisplayObj(dae4);
// using the child object we get a handle to its material
var childMat1:MaterialObject3D = getColladaNodeMaterial(listenerObj1);
var childMat2:MaterialObject3D = getColladaNodeMaterial(listenerObj2);
var childMat3:MaterialObject3D = getColladaNodeMaterial(listenerObj3);
var childMat4:MaterialObject3D = getColladaNodeMaterial(listenerObj4);
if (childMat1 != null) {
// now we have to tell the material to dispatch InteractiveScene3D events
childMat1.interactive = true;
// Now we can add our listeners to the child object
listenerObj1.addEventListener( InteractiveScene3DEvent.OBJECT_OUT ,handleLogoOut );
listenerObj1.addEventListener( InteractiveScene3DEvent.OBJECT_OVER , handleLogoOver);
listenerObj1.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK , handleLogoClick );
}
if (childMat2 != null) {
childMat2.interactive = true;
listenerObj2.addEventListener( InteractiveScene3DEvent.OBJECT_OUT ,handleLogoOut );
listenerObj2.addEventListener( InteractiveScene3DEvent.OBJECT_OVER , handleLogoOver);
listenerObj2.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK , handleLogoClick );
}
if (childMat3 != null) {
childMat3.interactive = true;
listenerObj3.addEventListener( InteractiveScene3DEvent.OBJECT_OUT ,handleLogoOut );
listenerObj3.addEventListener( InteractiveScene3DEvent.OBJECT_OVER , handleLogoOver);
listenerObj3.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK , handleLogoClick );
}
if (childMat4 != null) {
childMat4.interactive = true;
listenerObj4.addEventListener( InteractiveScene3DEvent.OBJECT_OUT ,handleLogoOut );
listenerObj4.addEventListener( InteractiveScene3DEvent.OBJECT_OVER , handleLogoOver);
listenerObj4.addEventListener( InteractiveScene3DEvent.OBJECT_CLICK , handleLogoClick );
}
}
/* ************************************** */
/* Collada Interactivity Helper Methods */
/* ************************************** */
public function getColladaDisplayObj(tempCO : DisplayObject3D) : DisplayObject3D {
trace("temp"+tempCO);
var returnObj : DisplayObject3D;
try {
var container : DisplayObject3D = tempCO.getChildByName("dae1", true);
var childname : String = String(container.childrenList()).substring(0, String(container.childrenList()).indexOf(": "));
trace("getColladaDisplayObj" + childname);
returnObj = container.getChildByName(childname);
} catch(errObject : Error) {
trace("no childname" + childname);
trace(errObject.message);
}
return returnObj;
}
private function getColladaNodeMaterial(colladaNode:DisplayObject3D):MaterialObject3D {
var returnVal:MaterialObject3D;
try { var materialName:String = StringUtil.trim(String(colladaNode.materials));
trace("materialName: '" + materialName + "'");
returnVal = colladaNode.getMaterialByName(materialName);
} catch(errObject:Error) {
trace(errObject.message);
trace("no material");
}
return returnVal;
}
}
}