package{ import flash.display.Sprite; import flash.events.Event; import org.papervision3d.view.Viewport3D; import org.papervision3d.scenes.Scene3D; import org.papervision3d.cameras.Camera3D; import org.papervision3d.materials.BitmapAssetMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.render.BasicRenderEngine; public class Avatar extends Sprite { private var viewport: Viewport3D; private var scene: Scene3D; private var camera: Camera3D; private var top: BitmapAssetMaterial; private var front: BitmapAssetMaterial; private var back: BitmapAssetMaterial; private var left: BitmapAssetMaterial; private var right: BitmapAssetMaterial; private var cube: Cube; private var renderer: BasicRenderEngine; public function Avatar():void { viewport = new Viewport3D(550, 400, false, true); addChild(viewport); scene = new Scene3D(); camera = new Camera3D(); renderer = new BasicRenderEngine(); top = new BitmapAssetMaterial("Top",true); top.interactive = true; top.doubleSided = true; front = new BitmapAssetMaterial("Front",true); front.interactive = true; front.doubleSided = true; back = new BitmapAssetMaterial("Back",true); back.interactive = true; back.doubleSided = true; left = new BitmapAssetMaterial("Left",true); left.interactive = true; left.doubleSided = true; right = new BitmapAssetMaterial("Right",true); right.interactive = true; right.doubleSided = true; var materialsList:MaterialsList = new MaterialsList(); materialsList.addMaterial( front, "front" ); materialsList.addMaterial( back, "back" ); materialsList.addMaterial( left, "left" ); materialsList.addMaterial( right, "right" ); materialsList.addMaterial( top, "top" ); materialsList.addMaterial( top, "bottom" ); cube = new Cube(materialsList, 600, 600, 600, 3, 3, 3); scene.addChild(cube); addEventListener(Event.ENTER_FRAME, onEnterFrame); cube.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, onPress); function onPress(e:InteractiveScene3DEvent):void { cube.x = (Math.random()*550 - 275)*2; cube.y = (Math.random()*400 - 200)*2; cube.z = (Math.random()*500)*2; } function onEnterFrame(e:Event):void { cube.rotationY += 2; renderer.renderScene(scene, camera, viewport); } } } }