Title: InteractiveTwoSided
Two sided InteractiveScene3DEvent example using BasicView - revision 856 - uses Tweener svn - click the image to rotate to a different image on the reverse side. Images from here and here
Actionscript:
-
/**
-
* v0.1 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.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Plane;
-
import org.papervision3d.view.BasicView;
-
import org.papervision3d.materials.BitmapMaterial;
-
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="0x000000")]
-
//
-
public class InteractiveTwoSided extends BasicView {
-
private var twoSidedDisplayObject:DisplayObject3D;
-
private var quality:uint = 8;
-
private var planeWidth:uint = 800;
-
private var planeHeight:uint = 600;
-
[Embed(source = 'assets/3148444287_cd3e90d92d.jpg')]
-
private var frontPic:Class;
-
[Embed(source='assets/3148442355_b655ca9d91.jpg')]
-
private var backPic:Class;
-
//
-
public function InteractiveTwoSided(viewportWidth:Number = 800, viewportHeight:Number = 600,
-
scaleToStage:Boolean=true, interactive:Boolean=true, cameraType:String="CAMERA3D"){
-
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
-
twoSidedDisplayObject = new DisplayObject3D();
-
//
-
// add front plane
-
var frontBitmapMaterial:BitmapMaterial = new BitmapMaterial(new frontPic().bitmapData);
-
frontBitmapMaterial.interactive = true;
-
frontBitmapMaterial.smooth = true;
-
frontBitmapMaterial.tiled = true;
-
var frontPlane:Plane = new Plane(frontBitmapMaterial, planeWidth, planeHeight, quality);
-
frontPlane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, planeClickedHandler, false, 0, true);
-
twoSidedDisplayObject.addChild(frontPlane);
-
//
-
// add back plane
-
var backBitmapMaterial:BitmapMaterial = new BitmapMaterial(new backPic().bitmapData);
-
backBitmapMaterial.interactive = true;
-
backBitmapMaterial.smooth = true;
-
backBitmapMaterial.tiled = true;
-
var backPlane:Plane = new Plane(backBitmapMaterial, planeWidth, planeHeight, quality);
-
backPlane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, planeClickedHandler, false, 0, true);
-
twoSidedDisplayObject.addChild(backPlane);
-
//
-
// twoSidedDisplayObject
-
backPlane.rotationY = 180;
-
frontPlane.z = 1;
-
scene.addChild(twoSidedDisplayObject);
-
camera.target = twoSidedDisplayObject;
-
camera.zoom = 60;
-
this.startRendering();
-
}
-
//
-
private function planeClickedHandler(e:InteractiveScene3DEvent):void {
-
if (!Tweener.isTweening(twoSidedDisplayObject)) {
-
var targetRotation:Number = (twoSidedDisplayObject.rotationY <180) ? 180 : 0 ;
-
Tweener.addTween(twoSidedDisplayObject, { time:2, transition:'easeinoutback',
-
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)
-
}
-
}
-
}