mouse
Looking around the inside of a Sphere
package { import flash.events.Event; import flash.ui.Mouse; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.core.utils.Mouse3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; import org.papervision3d.view.layer.ViewportLayer; import org.papervision3d.view.layer.util.ViewportLayerSortMode; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class LookingAroundTheInsideOfASphere extends BasicView { private var lookAtMe:DisplayObject3D; private var sphere:Sphere; private var mouse3D:Mouse3D; private var plane:Plane; public function LookingAroundTheInsideOfASphere() { viewport.interactive = true; mouse3D = viewport.interactiveSceneManager.mouse3D; Mouse3D.enabled = true; lookAtMe = new DisplayObject3D(); var wireframeMaterial:WireframeMaterial = new WireframeMaterial(0x444444); var colorMaterial:ColorMaterial = new ColorMaterial(0xdddddd); var sphereMaterial:CompositeMaterial = new CompositeMaterial(); sphereMaterial.addMaterial(wireframeMaterial); sphereMaterial.addMaterial(colorMaterial); sphereMaterial.interactive = true; sphereMaterial.doubleSided = true; sphere = new Sphere(sphereMaterial, 500, 24, 18); var planeMaterial:MaterialObject3D = new ColorMaterial(0xcc0000); planeMaterial.doubleSided = true; plane = new Plane(planeMaterial, 50, 50); var viewportLayer:ViewportLayer = new ViewportLayer(viewport, plane); viewportLayer.layerIndex = 1; viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; viewport.containerSprite.addLayer(viewportLayer); scene.addChild(plane); camera.z = -300; camera.target = lookAtMe; scene.addChild(sphere); startRendering(); Mouse.hide(); } override protected function onRenderTick(event:Event=null):void { lookAtMe.x += (mouse3D.x - lookAtMe.x) * .03; lookAtMe.y += (mouse3D.y - lookAtMe.y) * .03; plane.copyTransform(mouse3D); super.onRenderTick(event); } } }
Embedding a Collada File
package { import flash.display.Bitmap; import flash.events.MouseEvent; import flash.utils.ByteArray; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.render.QuadrantRenderEngine; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class ColladaExample extends BasicView { [Embed(source="assets/c.DAE", mimeType = "application/octet-stream")] private var daeAsset:Class; [Embed(source="assets/materials/c.png")] private var materialAsset:Class; private var cameraPitch:Number = 90; private var cameraYaw:Number = 270; private var isOrbiting:Boolean = false; private var previousMouseX:Number; private var previousMouseY:Number; public function ColladaExample() { var byteArray:ByteArray = new daeAsset() as ByteArray; var dae:DAE = new DAE(); dae.load(byteArray); var bitmap:Bitmap = new materialAsset() as Bitmap; var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData, true); dae.materials.addMaterial(bitmapMaterial, "cMaterial"); scene.addChild(dae); startRendering(); stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler); } private function mouseWheelHandler(event:MouseEvent):void { camera.moveForward(10 * event.delta); } private function onMouseDown(event:MouseEvent):void { isOrbiting = true; previousMouseX = event.stageX; previousMouseY = event.stageY; } private function onMouseUp(event:MouseEvent):void { isOrbiting = false; } private function onMouseMove(event:MouseEvent):void { var differenceX:Number = event.stageX - previousMouseX; var differenceY:Number = event.stageY - previousMouseY; if(isOrbiting) { 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); } } } }
Distance to Mouse using a dummy 3d object
package { import flash.events.Event; import org.papervision3d.core.math.Number3D; 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 DistanceFrom3DMouse extends BasicView { private var sphere:Sphere = new Sphere(); private var mouseDO3D:DisplayObject3D = new Sphere(); public function DistanceFrom3DMouse () { sphere.x = -500; sphere.y = 200; // scene.addChild(mouseDO3D); uncomment to see mouse sphere scene.addChild(sphere); startRendering(); } override protected function onRenderTick(event:Event=null):void { var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY); ray.normalize(); ray.multiplyEq(sphere.distanceTo(camera)); ray = Number3D.add(ray, camera.position); mouseDO3D.position = ray; var distance:Number = sphere.distanceTo(mouseDO3D); renderer.renderScene(scene, camera, viewport); } } }
I’m open to suggestions for a better way to do this
Distance from Mouse using screen coordinates
package { import flash.events.Event; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class DistanceFrom2DMouse extends BasicView { private var sphere:Sphere = new Sphere(); public function DistanceFrom2DMouse() { sphere.x = -500; sphere.y = -300; sphere.autoCalcScreenCoords = true; scene.addChild(sphere); startRendering(); } override protected function onRenderTick(event:Event=null):void { var distanceX:Number = viewport.containerSprite.mouseX - sphere.screen.x; var distanceY:Number = viewport.containerSprite.mouseY - sphere.screen.y; var distance:Number = Math.sqrt(distanceX * distanceX + distanceY * distanceY); renderer.renderScene(scene, camera, viewport); } } }
Search
Recommended Books
Speaking at FITC Toronto
Recent Posts
- FDT Theme Designer
- 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
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
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Jan | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 | ||||
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



