package { import away3d.cameras.HoverCamera3D; import away3d.containers.*; import away3d.primitives.*; import flash.display.BlendMode; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Vector3D; [SWF(width="500", height="400", frameRate="30", backgroundColor="#ffffff")] public class ExPlane extends Sprite { public var view:View3D; // HoverCam controls private var camera:HoverCamera3D; private var lastMouseX:Number; private var lastMouseY:Number; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var move:Boolean = false; // Embedded images (comment this entire code block if you're using Flash and then import the images to the library) [Embed (source="resources/wheelC.png")] private var cTex:Class; [Embed (source="resources/wheelM.png")] private var mTex:Class; [Embed (source="resources/wheelY.png")] private var yTex:Class; [Embed (source="resources/wheelK.png")] private var kTex:Class; [Embed (source="resources/wheelW.png")] private var wTex:Class; public function ExPlane() { super(); // create a 3D-viewport camera = new HoverCamera3D({zoom:18, focus:2000, distance:18000}); view = new View3D({camera:camera,x:250, y:200}); // add viewport to the stage addChild(view); camera.lookAt( new Vector3D(0, 0, 0) ); camera.panAngle = 0; camera.tiltAngle = 0; camera.minTiltAngle = -90; camera.hover(true); // Add some reference objects var cPlane:Plane = new Plane({material:cTex,width:200,height:200,bothsides:true,z:0,ownCanvas:true}); cPlane.rotationX = 90; cPlane.rotationY = 180; cPlane.blendMode = BlendMode.MULTIPLY; view.scene.addChild(cPlane); var mPlane:Plane = new Plane({material:mTex,width:200,height:200,bothsides:true,z:-50,ownCanvas:true}); mPlane.rotationX = 90; mPlane.rotationY = 180; mPlane.blendMode = BlendMode.MULTIPLY; view.scene.addChild(mPlane); var yPlane:Plane = new Plane({material:yTex,width:200,height:200,bothsides:true,z:-100,ownCanvas:true}); yPlane.rotationX = 90; yPlane.rotationY = 180; yPlane.blendMode = BlendMode.MULTIPLY; view.scene.addChild(yPlane); var kPlane:Plane = new Plane({material:kTex,width:200,height:200,bothsides:true,z:-150,ownCanvas:true}); kPlane.rotationX = 90; kPlane.rotationY = 180; kPlane.blendMode = BlendMode.MULTIPLY; view.scene.addChild(kPlane); // A final white plane is required as well var wPlane:Plane = new Plane({material:wTex,width:200,height:200,bothsides:true,z:-200}); wPlane.rotationX = 90; view.scene.addChild(wPlane); // Update view view.render(); camera.hover(); // only run when user is hovering addEventListener(Event.ENTER_FRAME, update); this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); } public function update(e:Event):void { // re-render viewport var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. if (move) { camera.panAngle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; camera.tiltAngle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } camera.hover(); view.render(); } private function MouseDown(event:MouseEvent):void { lastPanAngle = camera.panAngle; lastTiltAngle = camera.tiltAngle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }