package { import away3d.cameras.HoverCamera3D; import away3d.containers.View3D; import away3d.primitives.GridPlane; import away3d.primitives.SeaTurtle; import away3d.primitives.Trident; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Vector3D; [SWF(width="500", height="300", frameRate="60", backgroundColor="#FFFFFF")] public class ExGridplane extends Sprite { public var view:View3D; private var cam:HoverCamera3D; private var planeX:GridPlane; private var planeY:GridPlane; private var planeZ:GridPlane; private var gridSize:Number = 1000; // camera variables private var move:Boolean = false; private var lastPanAngle:Number; private var lastTiltAngle:Number; private var lastMouseX:Number; private var lastMouseY:Number; [Embed(source="resources/seaturtle.jpg")] private var turtleTexture:Class; public function ExGridplane() { cam = new HoverCamera3D({zoom:1, focus:7}); cam.panAngle = cam.panAngle = 45; cam.tiltAngle = cam.tiltAngle = 5; cam.hover(true); cam.minTiltAngle = -90; // create a viewport view = new View3D({x:250,y:150,camera:cam}); addChild(view); view.camera.y = 300; view.camera.zoom = 35; view.camera.lookAt(new Vector3D(0,0,0)); // Make a plane planeX = new GridPlane({width:gridSize,height:gridSize,segmentsW:10,segmentsH:10,material:"#red"}); view.scene.addChild(planeX); planeY = new GridPlane({width:gridSize,height:gridSize,segmentsW:10,segmentsH:10,rotationX:90,material:"#lightgreen"}); view.scene.addChild(planeY); planeZ = new GridPlane({width:gridSize,height:gridSize,segmentsW:10,segmentsH:10,rotationX:90,rotationY:90,material:"#blue"}); view.scene.addChild(planeZ); // Add trident for reference var tri:Trident = new Trident( (gridSize/2+100),true); view.scene.addChild(tri); // Add turtle so we have something to look at var turtle:SeaTurtle = new SeaTurtle({material:turtleTexture,rotationX:-90}); view.scene.addChild(turtle); this.addEventListener(Event.ENTER_FRAME,update); stage.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown); 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) { cam.panAngle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle; cam.tiltAngle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle; } cam.hover(); view.render(); } private function MouseDown(event:MouseEvent):void { lastPanAngle = cam.panAngle; lastTiltAngle = cam.tiltAngle; lastMouseX = stage.mouseX; lastMouseY = stage.mouseY; move = true; } private function MouseUp(event:MouseEvent):void { move = false; } } }