// papervision3D greate white // template v01 // kalle saas | http://kallesaas.com package { // flash import flash.display.Sprite; import flash.events.*; import flash.utils.*; import flash.text.TextField; // Papervision import org.papervision3d.cameras.FreeCamera3D; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; // Primitives import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.primitives.Cone; // gismo import org.papervision3d.objects.primitives.Cube; import org.papervision3d.materials.special.LineMaterial ; import org.papervision3d.core.geom.Lines3D; // Materials import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.utils.MaterialsList; // needed for flat shader import org.papervision3d.lights.PointLight3D; // interactive import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.core.utils.InteractiveSceneManager; import org.papervision3d.core.utils.Mouse3D; // tweener import caurina.transitions.*; public class LearningMouse3DIntermediate extends Sprite { // papervision3D private var viewport:Viewport3D; private var scene:Scene3D; private var camera:FreeCamera3D; private var renderer:BasicRenderEngine; // Primitives private var objPlane:Plane; private var objCone:Cone; // material private var flmat:FlatShadeMaterial; // light private var pointLight:PointLight3D; // interactive private var mouse3D:Mouse3D; // gismo private var gismo:Cube; private var ObjectsWithGismo:Array = new Array(); /** * Konstruktor * @return */ public function LearningMouse3DIntermediate() { init(); } private function init():void { initPapervision(); initMaterials(); initObjects(); initListeners(); initAnimation(); } /** * Alles was zum erstellen benötigt wird. * Viewport3D, scene, camera, renderer */ private function initPapervision():void { // define viewport with interactivity. viewport = new Viewport3D( 800, 600, true, true ); // enable the mouse Mouse3D.enabled = true; addChild( viewport); scene = new Scene3D(); camera = new FreeCamera3D(); renderer = new BasicRenderEngine(); // point light pointLight = new PointLight3D(true); pointLight.y = 1500; } /** * Erstelle alle Materialien die benötigt werden: */ private function initMaterials():void { // PlaneMaterial flmat = new FlatShadeMaterial(pointLight, 0x00ccff); flmat.interactive = true; } /** * Erstelle alle Objekte */ private function initObjects():void { objPlane = new Plane(flmat, 450, 450, 10, 10); scene.addChild(objPlane, 'objPlane') objPlane.rotationX = -90 ObjectsWithGismo.push(objPlane) objCone = new Cone(new FlatShadeMaterial(pointLight, 0xFF0000), 30, 100, 8, 6 ) objCone.rotationX = -90; objCone.z = -50; objPlane.addChild(objCone) ObjectsWithGismo.push(objCone) camera.y = 500 camera.lookAt(objPlane) camera.focus = 600 insertAxisVectors(); } /** * Initiiere alle EventListener. */ private function initListeners():void { addEventListener( Event.ENTER_FRAME, onEnterFrame ); // event listener for the plane objPlane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, mouseClick); } /** * Initiiere die EventListener für Animationen. */ private function initAnimation():void { addEventListener( Event.ENTER_FRAME, rotateObject ); } /*_________________________________________________________________________ * Funktionen für EventListener */ private function onEnterFrame( e:Event ):void { renderer.renderScene( scene, camera, viewport ); } private function mouseClick(event:InteractiveScene3DEvent):void { var x = getChildByName('iMouseX') var y = getChildByName('iMouseY') var z = getChildByName('iMouseZ') x.text = viewport.interactiveSceneManager.mouse3D.x y.text = viewport.interactiveSceneManager.mouse3D.y z.text = viewport.interactiveSceneManager.mouse3D.z // getting the virtual mouse positions. RangeX: 0 - 1, RangeY: 0 - 1; var xV = getChildByName('VirtualMouseX') var yV = getChildByName('VirtualMouseY') var zV = getChildByName('VirtualMouseZ') xV.text = viewport.interactiveSceneManager.virtualMouse.x yV.text = viewport.interactiveSceneManager.virtualMouse.y var xNew = 450*viewport.interactiveSceneManager.virtualMouse.x - 225 var yNew = -450*viewport.interactiveSceneManager.virtualMouse.y + 225 Tweener.addTween(objCone,{x: xNew, y: yNew , time:.5, transition:"easeOutExpo"}); } /*_________________________________________________________________________ * Funktionen für Animationen */ private function rotateObject( e:Event ):void { objPlane.rotationY += 1 } private function insertAxisVectors():void { for (var i:String in ObjectsWithGismo) { //Create gismo var gismo = new Cube( new MaterialsList({ all: new ColorMaterial(0x888888) }), 10, 10, 10 ); ObjectsWithGismo[i].addChild(gismo); // X = Red; Y = Green; Z = Blue var bx:Cube = new Cube( new MaterialsList({ all: new ColorMaterial(0xFF0000) }), 3, 3, 3 ); var by:Cube = new Cube( new MaterialsList({ all: new ColorMaterial(0x00FF00) }), 3, 3, 3 ); var bz:Cube = new Cube( new MaterialsList({ all: new ColorMaterial(0x0000FF) }), 3, 3, 3 ); bx.x = 100; by.y = 100; bz.z = -100; bx.scaleX = 20; by.scaleY = 20; bz.scaleZ = 20; gismo.addChild(bx); gismo.addChild(by); gismo.addChild(bz); } } } }