Dragging Spheres
package { import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.core.math.Number3D; import org.papervision3d.core.math.Plane3D; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class DraggingASphere extends BasicView { private const NUM_SPHERES:int = 11; private var planeToDragOn:Plane3D; private var currentSphere:Sphere; private var light:PointLight3D; public function DraggingASphere() { viewport.interactive = true; camera.y = 400; light = new PointLight3D(true); scene.addChild(light); for(var i:int = 0; i < NUM_SPHERES; i++) { var material:FlatShadeMaterial = new FlatShadeMaterial(light, 0xeeeeee, 0x2d2d2d, 10); material.interactive = true; var sphere:Sphere = new Sphere(material); sphere.x = (i - NUM_SPHERES/2) * 200; scene.addChild(sphere); sphere.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, objectPressHandler); stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); } var up:Number3D = new Number3D(0, 1, 0); planeToDragOn = new Plane3D(up, new Number3D(0,0,0)); startRendering(); } private function objectPressHandler(event:InteractiveScene3DEvent):void { currentSphere = event.displayObject3D as Sphere; } private function mouseUpHandler(event:MouseEvent):void { currentSphere = null; } override protected function onRenderTick(event:Event=null):void { var ray:Number3D = camera.unproject(viewport.containerSprite.mouseX, viewport.containerSprite.mouseY); ray = Number3D.add(ray, camera.position); var cameraVertex3D:Vertex3D = new Vertex3D(camera.x, camera.y, camera.z); var rayVertex3D:Vertex3D = new Vertex3D(ray.x, ray.y, ray.z); var intersectPoint:Vertex3D = planeToDragOn.getIntersectionLine(cameraVertex3D, rayVertex3D); if(currentSphere) { currentSphere.x = intersectPoint.x; currentSphere.y = intersectPoint.y; currentSphere.z = intersectPoint.z; } light.x = intersectPoint.x; light.y = intersectPoint.y + 100; light.z = intersectPoint.z; renderer.renderScene(scene, camera, viewport); } } }
3 Comments to Dragging Spheres
Great work, but how to access stage, viewport and camera from within do3d?
Do I need to do everything inside BasicView/IView?
My problem is: I created do3d named Book. Inside Book, there are several BookPages (also do3d), and inside BookPages i got another do3d, and inside this do3d i want to do some dragging actions. Now I need to transmit variables (stage, viewport and camera) via each do3d constructor, but i think, that this method sucks. Other way is to use Singleton as Variable Locators, but this also doesn’t sound good.
So, how to this?
PS. Sorry for my bad english.
Great work, but how to Drag a DAE modle
could you examples it to me?
I need it for my a project~
thanks you for your share
February 20, 2009
nice, but i think that it can be more useful if it is not sphere but DAE file, do anyone know about some tutorial how drag collada file?????
Leave a comment
Search
Recent Posts
- 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
- Dynamic Text on a Plane
- Maya Texture Baking
- Creating a Custom VectorVision Font
- Workshop video and example dump
- 3D Math Book Recommendation
- Heading to New York. brb ;)
- Launching Flex4.org
- Flex 4 Layouts and Groups
- Flex 4 States
- How to click on stuff in Papervision3D - Viewport, ViewportLayers, InteractiveScene3DEvent, Mouse3D, and MovieMaterial Buttons
Recent Comments
- alexxcz on MorphController - Mighty Morphing Papervision3D
- andre venancio on 3D Math Book Recommendation
- DS on Dynamic Text on a Plane
- John Lindquist on Maya Texture Baking
- Itai on Maya Texture Baking
- Javier on End dump
- samBrown on End dump
- tf on archive
- Pan on requests
- Martin Lindelöf on requests


December 10, 2008