package { import caurina.transitions.Tweener import flash.display.BitmapData import flash.display.StageQuality import flash.events.Event import flash.events.MouseEvent import org.papervision3d.core.effects.view.ReflectionView import org.papervision3d.core.proto.MaterialObject3D import org.papervision3d.materials.BitmapMaterial import org.papervision3d.objects.primitives.Plane [SWF (width="640", height="480", frameRate="30")] public class ReflectionSample extends ReflectionView { [Embed (source="1.gif")] private var picture_g1:Class [Embed (source="1.jpg")] private var picture_j1:Class [Embed (source="2.jpg")] private var picture_j2:Class [Embed (source="3.jpg")] private var picture_j3:Class [Embed (source="1.png")] private var picture_p1:Class [Embed (source="2.png")] private var picture_p2:Class [Embed (source="3.png")] private var picture_p3:Class [Embed (source="4.png")] private var picture_p4:Class [Embed (source="5.png")] private var picture_p5:Class [Embed (source="6.png")] private var picture_p6:Class private const PICTURE_CLASSES:Array = [ picture_g1, picture_j1, picture_j2, picture_j3, picture_p1, picture_p2, picture_p3, picture_p4, picture_p5, picture_p6 ] private var planes : Array private const DISTANCE:Number = 70 private const ANGLE:Number = 70 private const ZOOM_Z:Number = 150 public function ReflectionSample() { super(640, 480, false) initPlane() camera.z = -400 camera.y = 100 camera.target.y = 100 addEventListener(Event.ENTER_FRAME, enterFrame) stage.addEventListener(MouseEvent.MOUSE_MOVE, moved) stage.quality = StageQuality.LOW } public function initPlane() : void { planes = [] for (var i:Number = 0; i < PICTURE_CLASSES.length; i++) { var bitmapData:BitmapData = new PICTURE_CLASSES[i]().bitmapData var material:MaterialObject3D = new BitmapMaterial(bitmapData) var width:Number = 100 var height:Number = bitmapData.height * width / bitmapData.width if (height > 150) { width = width * 150 / height height = 150 } var plane:Plane = new Plane(material, width, height) plane.y = height / 2 plane.x += i * DISTANCE planes[i] = plane scene.addChild(plane) } } public function enterFrame(e:Event) : void { singleRender() } public function moved(e:MouseEvent) : void { var y:Number = 100 + 100 * (mouseY - stage.height / 2) / stage.height camera.y = y var x:Number = camera.x x = planes[planes.length - 1].x * mouseX / stage.width Tweener.addTween(camera, {x:x, time:1}) Tweener.addTween(camera.target, {x:x, time:1}) for each(var plane:Plane in planes) { var rotation:Number var z:Number if (Math.abs(plane.x - x) < DISTANCE / 2) { rotation = 0 z = -ZOOM_Z } else if (plane.x > x) { rotation = -ANGLE z = 0 } else { rotation = ANGLE z = 0 } var params:Object = { localRotationY:rotation, z:z, time:1 } Tweener.addTween(plane, params) } } } }