Dragging mouse for camera orbit
This little gem comes from a chat I had a while back with Tim Knip:
package { import flash.events.MouseEvent; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class OrbitingCameraExample extends BasicView { private var isOribiting:Boolean; private var cameraPitch:Number = 90; private var cameraYaw:Number = 270; private var cameraTarget:DisplayObject3D = DisplayObject3D.ZERO; private var previousMouseX:Number; private var previousMouseY:Number; private var light:PointLight3D; public function OrbitingCameraExample() { light = new PointLight3D(); var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcc0000); var sphere1:Sphere = new Sphere(material, 300, 10, 10); var sphere2:Sphere = new Sphere(material, 100, 10, 10); sphere2.x = 300; sphere2.y = 300; sphere2.z = 700 var sphere3:Sphere = new Sphere(material, 100, 10, 10); sphere3.x = 600; sphere3.y = -400; sphere3.z = -200; var sphere4:Sphere = new Sphere(material, 100, 10, 10); sphere4.x = -700; sphere3.z = -100; scene.addChild(sphere1); scene.addChild(sphere2); scene.addChild(sphere3); scene.addChild(sphere4); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); startRendering(); } private function onMouseDown(event:MouseEvent):void { isOribiting = true; previousMouseX = event.stageX; previousMouseY = event.stageY; } private function onMouseUp(event:MouseEvent):void { isOribiting = false; } private function onMouseMove(event:MouseEvent):void { var differenceX:Number = event.stageX - previousMouseX; var differenceY:Number = event.stageY - previousMouseY; if(isOribiting) { cameraPitch += differenceY; cameraYaw += differenceX; cameraPitch %= 360; cameraYaw %= 360; cameraPitch = cameraPitch > 0 ? cameraPitch : 0.0001; cameraPitch = cameraPitch < 90 ? cameraPitch : 89.9999; previousMouseX = event.stageX; previousMouseY = event.stageY; camera.orbit(cameraPitch, cameraYaw, true, cameraTarget); } } } }
-
Soapstar
-
NuttyMonk
-
marco
-
wonky rat
-
Dan
-
lilly
-
lilly
-
Mattyluv
-
Joe
-
Joe
-
dada
-
John Lindquist
-
sascha/hdrs
-
John Lindquist
-
BeechyBoy
-
BeechyBoy
-
John Lindquist
-
BeechyBoy
-
John Lindquist
-
BeechyBoy
-
Trevor
-
BeechyBoy
Search
Recommended Books
Speaking at FITC Toronto
Recent Posts
- haXe Tutorial
- AS3 Signals Tutorial
- Preferred Video Tutorial Resolution?
- TweenMax – Tweening a timeline (Advanced Tweening)
- Robotlegs + Flight + Union Platform
- Back in the saddle
- Eclipse Theme Designer Preview
- RobotLegs Hello World Video Tutorial
- 10 Things Every Senior Flash Developer Should Know
- Efflex – 3D Effects for Flex
- MorphController – Mighty Morphing Papervision3D
- End dump
- Test if a plane is within the view of the camera (aka testing if culled)
- Materials Reference
- Perlin Blob
Recent Comments
- BAM5 on haXe Tutorial
- AlexG on Finding 2D Coordinates of a DisplayObject3D
- Josh on ActionScript 3 – Model View Controller (MVC)
- martin everett on requests
- martin everett on requests
- lillacska on Dragging Spheres
- Guy Ritchie on MXML without the Flex framework
- Pedro on ActionScript 3 – Namespaces
- daveevolve on AS3DMod Perlin Noise
- sebomoto on haXe Tutorial
Categories
Archives
Preferred Video Tutorial Resolution
- 1024x768 (53%, 85 Votes)
- 1280x1024 (15%, 24 Votes)
- 1920x1080 (15%, 24 Votes)
- 800x600 (13%, 20 Votes)
- 480x320 (4%, 6 Votes)
- 640x480 (0%, 2 Votes)
Total Voters: 160


