Dragging Planes and lookAt Camera
package { import flash.display.BitmapData; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.core.math.Number3D; import org.papervision3d.core.math.Plane3D; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class DraggingPlanes extends BasicView { private const NUM_PLANES:int = 11; private var planeToDragOn:Plane3D; private var currentPlane:Plane; private var light:PointLight3D; public function DraggingPlanes() { viewport.interactive = true; camera.y = 100; for(var i:int = 0; i < NUM_PLANES; i++) { var material:MaterialObject3D = createMaterial(); material.interactive = true; /* Please note that, by default, the material on a plane is placed on the "back" of a plane (since the camera defaults to -1000 z. So if you tell the plane to "lookAt" the camera, you will see the front of the plane with nothing on it. You can solve this by making the material doubleSided */ material.doubleSided = true; var plane:Plane = new Plane(material, 100, 100, 4, 4); plane.x = (i - NUM_PLANES/2) * 200; scene.addChild(plane); plane.lookAt(camera); plane.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 createMaterial():MaterialObject3D { var bitmapData:BitmapData = new BitmapData(300, 200, false, Math.random() * 0xffffff); var bitmapBorder:BitmapData = new BitmapData(320, 220, false, 0xffffff); bitmapBorder.copyPixels(bitmapData, bitmapData.rect, new Point(10, 10)); var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmapBorder, true); bitmapMaterial.smooth = true; return bitmapMaterial; } private function objectPressHandler(event:InteractiveScene3DEvent):void { currentPlane = event.displayObject3D as Plane; } private function mouseUpHandler(event:MouseEvent):void { currentPlane = 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(currentPlane) { currentPlane.x = intersectPoint.x; currentPlane.y = intersectPoint.y; currentPlane.z = intersectPoint.z; currentPlane.lookAt(camera); } renderer.renderScene(scene, camera, viewport); } } }
-
john Webber
-
John Lindquist
-
mindfocker
-
Ruby
-
John Lindquist
-
Michael
Search
Recommended Books
Speaking at FITC Toronto
Recent Posts
- FDT Super Awesome March Deal
- 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
- KD on ActionScript 3 – Model View Controller (MVC)
- 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
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


