var container:MovieClip; var scene:Scene3D; varcamera:Camera3D; var sphere:Collada;
// _______________________________________________________________________ // Main function HelloCollada(){
init3D();
this.onEnterFrame = loop3D; }
// _______________________________________________________________________ // Init3D function init3D(){ trace("run"); // Create container movieclip and center it
container = this.createEmptyMovieClip("container", this.getNextHighestDepth());
container._x = 200
container._y =200
// Create scene
scene = new Scene3D(container);
// Create camera camera = new Camera3D(); camera.zoom = 3;
// Create material var texture:BitmapData = BitmapData.loadBitmap("Bitmap"); var material:BitmapMaterial = new BitmapMaterial(texture);
material.oneSide = true;// Make it single sided. this gives a performance boost
plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, plane_objectClickHandler); } } privatefunction createRandomBitmapMaterial():BitmapMaterial { //grab a bitmapAsset from the array (this is very ugly, but not important to the concept :) ) //var bitmap:Bitmap = Bitmap(new assets[Math.floor(Math.random() * assets.length)]); var bitmapMaterial:BitmapMaterial = new BitmapMaterial(assets[Math.floor(Math.random() * assets.length)]);
return bitmapMaterial; } privatefunction plane_objectClickHandler(event:InteractiveScene3DEvent):void{ var plane:Plane = Plane(event.target); //put the target behind the plane
cameraTarget.copyTransform(plane);
cameraTarget.moveBackward(DISTANCE_FROM_PLANE);
createTween(cameraTarget); } privatefunction backgroundSprite_clickHandler(event:MouseEvent):void{
createTween(cameraStart); } privatefunction createTween(displayObject3d:DisplayObject3D):void{ //when "slerping", this value is a range from 0 to 1 //0 being the starting total rotation (AKA transformation) //1 being the ending total rotation
cameraWithSlerp.slerp = 0;
TweenMax.to(cameraWithSlerp, TWEEN_TIME, tweenObject); } privatefunction camera_updateCallback():void{
currentQuaternion = Quaternion.slerp(startQuaternion, endQuaternion, cameraWithSlerp.slerp);
cameraWithSlerp.transform.copy3x3(currentQuaternion.matrix);
singleRender(); }
override publicfunction singleRender():void{
renderer.renderScene(scene, cameraWithSlerp, viewport); } } } //a helper class whose sole purpose is to add the slerp property //I use this for the sake of brevity, but for production code //you would move this into a new ActionScript file import org.papervision3d.cameras.Camera3D; class CameraWithSlerp extends Camera3D { publicvar slerp:Number = 0; }