/
PanaramicViewer_Cylinder.as
115 lines (92 loc) · 3.54 KB
/
PanaramicViewer_Cylinder.as
1
package{ import flash.display.Sprite; import flash.events.Event; import org.papervision3d.cameras.Camera3D; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.objects.primitives.Cylinder; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.BitmapFileMaterial; import org.papervision3d.events.FileLoadEvent; import flash.geom.Point; public class PanaramicViewer_Cylinder extends Sprite { private var scene :Scene3D; private var camera :Camera3D; private var viewport :Viewport3D; private var renderer :BasicRenderEngine; private var material :BitmapMaterial; private var object :Cylinder; private var yawing :int = 1; // drag controls private var dragStartPos:Point; private var dragEndPos:Point; private var onDrag:Boolean = false; // Gesture Controls private var flickVector:Point; private var pinchVector:Point; public function PanaramicViewer_Cylinder() { scene = new Scene3D(); camera = new Camera3D(); viewport = new Viewport3D(); viewport.autoScaleToStage = true; viewport.interactive = true; addChild(viewport); renderer = new BasicRenderEngine(); material = new BitmapFileMaterial("pano.jpg",true); material.doubleSided = true; material.interactive = true; material.addEventListener(FileLoadEvent.LOAD_COMPLETE,handleLoadComplete); } private function handleLoadComplete(event:FileLoadEvent):void { material.removeEventListener(FileLoadEvent.LOAD_COMPLETE, handleLoadComplete); object = new Cylinder(material, 2600, 4000,50, 8, -1, false, false); scene.addChild(object); object.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, handleObjectOver); object.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, handleObjectOut); object.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, handleObjectPress); object.addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE, handleObjectRelease); object.addEventListener(InteractiveScene3DEvent.OBJECT_RELEASE_OUTSIDE, handleObjectRelease); object.addEventListener(InteractiveScene3DEvent.OBJECT_MOVE, handleObjectMove); addEventListener(Event.ENTER_FRAME, handleEnterFrame); } private function handleEnterFrame(e:Event):void { //object.yaw(yawing); object.z = -1000; renderer.renderScene(scene, camera, viewport); } private function handleObjectOver(e:InteractiveScene3DEvent):void { viewport.containerSprite.buttonMode = true; } private function handleObjectOut(e:InteractiveScene3DEvent):void { viewport.containerSprite.buttonMode = false; onDrag = false; } private function handleObjectPress(e:InteractiveScene3DEvent):void { dragStartPos = new Point(mouseX, mouseY); onDrag = true; } private function handleObjectRelease(e:InteractiveScene3DEvent):void { onDrag = false; } private function handleObjectMove(e:InteractiveScene3DEvent):void{ if (onDrag) { dragEndPos = new Point(mouseX, mouseY); var d:Number = (dragEndPos.x - dragStartPos.x)/1000.0 * 10; object.yaw(d); } } }}