package { import away3d.containers.ObjectContainer3D; import away3d.containers.Scene3D; import away3d.core.math.Number3D; import away3d.primitives.Cube; import away3d.primitives.Sphere; import away3d.primitives.Trident; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; [SWF(width="500", height="400", frameRate="60", backgroundColor="#FFFFFF")] public class Basic02 extends Sprite { private var box:Cube; private var sphere:Sphere; private var baseObject:ObjectContainer3D; private var view1:Basic02_view; private var view2:Basic02_view; private var view3:Basic02_view; private var view4:Basic02_view; private var myScene:Scene3D; private var cover:Cover; public function Basic02() { // Don't scale this.stage.scaleMode = StageScaleMode.NO_SCALE; this.stage.align = StageAlign.TOP_LEFT; // Create Scene myScene = new Scene3D(); // Don't recalc the scene automatically. By default, each view recalcs the scene. If we have multiple views, we should rather do this manually with myScene.updateScene() myScene.autoUpdate = false; // Add the trident for reference var axis:Trident = new Trident(180); myScene.addChild(axis); // Create an object grop to hold the other geometry baseObject = new ObjectContainer3D(); myScene.addChild(baseObject); // create a sphere and put it on the 3D stage box = new Cube({material:"blue#white",x:-100, width:50, height:50, depth:50}); baseObject.addChild(box); // create a sphere and put it on the 3D stage sphere = new Sphere({material:"red#black",x:100,radius:50}); baseObject.addChild(sphere); // create the four view(ports) using our custom class var w:Number = 249; var h:Number = 199; view1 = new Basic02_view(w,h,0,0,myScene); addChild(view1); view2 = new Basic02_view(w,h,w,0,myScene); addChild(view2); view3 = new Basic02_view(w,h,0,h,myScene); addChild(view3); view4 = new Basic02_view(w,h,w,h,myScene); addChild(view4); // position the cameras at various angles around the objects view1.cam.position = new Number3D(0, 1000, 300); view2.cam.position = new Number3D(1000, 0, 0); view3.cam.position = new Number3D(0, 1000, 1000); view4.cam.position = new Number3D(1000, 1000, -500); // No need to try, just point to the center coordinate and we hit spot on! view1.cam.lookAt( new Number3D(0, 0, 0) ); view2.cam.lookAt( new Number3D(0, 0, 0) ); view3.cam.lookAt( new Number3D(0, 0, 0) ); view4.cam.lookAt( new Number3D(0, 0, 0) ); // render the view addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { if(!cover){ // Upon first run - Update the views and display the "cover" // updateScene must be called before the render or the View sprite will be "null" myScene.update(); view1.View.render(); view2.View.render(); view3.View.render(); view4.View.render(); cover = new Cover(this); cover.refresh(); addChild(cover); } else if(cover && !cover.visible) { baseObject.rotationX += 1; baseObject.rotationY += 0.5; myScene.update(); view1.View.render(); view2.View.render(); view3.View.render(); view4.View.render(); } } } }