Title: InteractiveScene3DEvent example
Interactivity example with pv3d (click on the photo) using BasicView – revision 702 – [update removed onComplete + small improvements + tiled material] – also uses Tweener . JPG by mimiyaw
- /**
- * v0.3 code by dehash.com 2008
- * Released as open source under the BSD License
- * http://www.opensource.org/licenses/bsd-license.php
- */
- package com.dehash.pv3d.examples.interactivity {
- import org.papervision3d.objects.primitives.Plane;
- import org.papervision3d.view.BasicView;
- import org.papervision3d.events.FileLoadEvent;
- import org.papervision3d.materials.BitmapFileMaterial;
- import org.papervision3d.events.InteractiveScene3DEvent;
- import flash.events.Event;
- // http://code.google.com/p/tweener/
- import caurina.transitions.Tweener;
- [SWF(width="800", height="600", backgroundColor="0xffffff")]
- public class InteractiveScene3DEventExample extends BasicView
- {
- private var plane:Plane;
- private var quality:uint = 8;
- private var planeWidth:uint = 800;
- private var planeHeight:uint = 600;
- private var bitmapFileMaterial:BitmapFileMaterial;
- public function InteractiveScene3DEventExample(viewportWidth:Number = 800, viewportHeight:Number = 600,
- scaleToStage:Boolean=true, interactive:Boolean=true, cameraType:String="CAMERA3D")
- {
- super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
- bitmapFileMaterial = new BitmapFileMaterial();
- bitmapFileMaterial.interactive = true;
- bitmapFileMaterial.doubleSided = true;
- bitmapFileMaterial.smooth = true;
- bitmapFileMaterial.tiled = true;
- bitmapFileMaterial.addEventListener(FileLoadEvent.LOAD_COMPLETE, handleBitmapFileMaterialLoaded, false, 0, true);
- bitmapFileMaterial.addEventListener(FileLoadEvent.LOAD_ERROR, handleBitmapFileMaterialError, false, 0, true);
- bitmapFileMaterial.texture = "assets/2782350904_dd8b955fb1_b.jpg";
- plane = new Plane(null, planeWidth, planeHeight, quality);
- plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, planeClickedHandler, false, 0, true);
- plane.scaleX = 0;
- plane.scaleY = 0;
- scene.addChild(plane);
- camera.target = plane;
- camera.zoom = 60;
- this.startRendering();
- }
- private function handleBitmapFileMaterialLoaded(e:FileLoadEvent):void {
- plane.material = bitmapFileMaterial;
- Tweener.addTween(plane, { time:1, transition:'easeoutquint', scaleX: 1, scaleY: 1} );
- }
- private function handleBitmapFileMaterialError(e:FileLoadEvent):void {
- trace('handleBitmapFileMaterialError'+e);
- }
- private function planeClickedHandler(e:InteractiveScene3DEvent):void {
- if (!Tweener.isTweening(plane)) {
- var targetRotation:Number = (plane.rotationY < 360) ? 360 : 0 ;
- Tweener.addTween(plane, { time:6, transition:'easeinoutbounce',
- rotationY: targetRotation } );
- }
- }
- protected override function onRenderTick(event:Event = null):void {
- var rotY: Number = (mouseY-(stage.stageHeight/2))/(stage.height/2)*(1200);
- var rotX: Number = (mouseX-(stage.stageWidth/2))/(stage.width/2)*(-1200);
- camera.x = camera.x + (rotX - camera.x) / 5;
- camera.y = camera.y + (rotY - camera.y) / 5;
- renderer.renderScene(scene, camera, viewport)
- }
- }
- }