package { import away3d.cameras.HoverCamera3D; import away3d.containers.*; import away3d.core.base.*; import away3d.core.light.*; import away3d.core.math.*; import away3d.events.*; import away3d.materials.*; import away3d.primitives.*; import flash.display.Bitmap; import flash.display.BlendMode; import flash.display.Sprite; import flash.display.Stage; import flash.events.Event; import flash.events.MouseEvent; [SWF(width="500", height="400", frameRate="30", backgroundColor="#ffffff")] public class Basic08_plane extends Sprite { private var View:View3D; private var swfStage:Stage; private var cover:Cover; private var waitFourFrames:Number = 0; // 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 Basic08_plane() { 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 Number3D(0, 0, 0) ); camera.targetpanangle = camera.panangle = 0; camera.targettiltangle = camera.tiltangle = 0; camera.mintiltangle = -90; // 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 cover = new Cover(this,500,400,"Adobe product icons, from John Nack's blog"); addEventListener(Event.ENTER_FRAME, onEnterFrame); this.stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); this.stage.addEventListener(MouseEvent.MOUSE_UP, MouseUp); } private function onEnterFrame(e:Event):void { if(!cover.visible || waitFourFrames < 4) { // rerender viewport var cameraSpeed:Number = 0.3; // Approximately same speed as mouse movement. if (move) { camera.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; camera.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } camera.hover(); View.render(); waitFourFrames++; if(waitFourFrames == 4){ cover.refresh(); addChild(cover); } } } private function MouseDown(event:MouseEvent):void { lastPanAngle = camera.targetpanangle; lastTiltAngle = camera.targettiltangle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }