Papervision3D tutorial 4

 

BoxesExploosio väri materiaalilla:

 

package {
	import flash.events.Event;
	import flash.events.MouseEvent;

	import org.papervision3d.materials.utils.MaterialsList;
	//import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.ColorMaterial;//

	import caurina.transitions.Tweener;

	public class BoxesExploosio extends BasicView {

		private var plane:Cube;
		private var partikkelienLukumaara:uint=15;
		var pivotP:DisplayObject3D;
		var paperitArray=[];

		private var angle:Number=0;

		public function BoxesExploosio() {
			init();
			startRendering();
		}


		private function init():void {

			viewport.interactive=true;
			addEventListener(MouseEvent.CLICK, clikkaus);
			pivotP = new DisplayObject3D();

			for (var i:uint = 0; i < partikkelienLukumaara; i++) {
				var vari:Number=Math.random()*0xFFFFFF;// satunnainen väri syntyy tästä
				var material:ColorMaterial=new ColorMaterial(vari);

				var materialsList:MaterialsList = new MaterialsList();
				materialsList.addMaterial( material,"all");
				plane=new Cube(materialsList,80,80,80,2,2,2);
				//material.interactive = true;
				Tweener.addTween(plane,{
				x:Math.random()*1000-500,
				y:Math.random()*1000-500,
				z:Math.random()*1000-500,
				localRotationX:Math.random()*360,
				localRotationY:Math.random()*360,
				localRotationZ:Math.random()*360,
				time:2, transition:"easeOutSine"
				});
				//plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick); 
				pivotP.addChild(plane);
				plane.material.doubleSided=true;
				paperitArray.push(plane);


			}
			scene.addChild(pivotP);
		}


		function clikkaus(e:MouseEvent):void {
			trace("klikkaus");
		

		}

		override protected function onRenderTick(e:Event=null):void {
			pivotP.localRotationY++;
			super.onRenderTick();
		}
	}
}

lisätään FlatShader edelliseen

// shaderin käyttämät luokat
	import org.papervision3d.lights.PointLight3D;
//	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.materials.shaders.FlatShader;
	import org.papervision3d.materials.shaders.ShadedMaterial;
luokka lohkoon:
private var light:PointLight3D;
init metodiin määritellään valon ominaisuuksia:
			light=new PointLight3D(true);
			light.z=-1100;
			light.y=700;
			light.x=700;
			scene.addChild(light);
vaihdetaan materiali silmukassa
    var shadeMaterial:FlatShadeMaterial = new FlatShadeMaterial(light,0xFFFFFF,vari,100);
    materialsList.addMaterial( shadeMaterial,"all");
	
 
 

 

PlaneGridPyoritys

 

package {
	import flash.events.Event;
 // modified from  Jeff Winder, Paul Tondeur: Papervision3D Essentials book  MouseInteractionExample class
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;

	public class PlaneGridPyoritys extends BasicView {
		private var grid:DisplayObject3D;
		private var easeOut:Number=0.3;//higher is faster ease-out
		private var reachX:Number=0.1;//higher is smaller reach
		private var reachY:Number=0.1;//higher is smaller reach
		private var reachZ:Number=0.5;//higher is smaller reach
		private var rotX:Number=0.5;//higher is more rotation of the grid in over x axis examples 3 and 4
		private var rotY:Number=0.5;//higher is more rotation of the grid over y axis in examples 3 and 4
		var planeArray:Array=[];
		var numberOfColumns:int=9;
		var numberOfRows:int=5;
		public function PlaneGridPyoritys() {

			init();
			startRendering();
		}

		private function init():void {
			grid = new DisplayObject3D();
			scene.addChild(grid);


			var planeSize:int=110;
			//spacing is the size of the plane plus the spacing in between them, should be higher than planeSize
			//if you don't want planes to overlap
			var planeSpacing:Number=116;
			//offset from center of viewport, to center grid position
			var centerOffsetX:Number=numberOfColumns*planeSpacing*0.5-planeSpacing*0.5;
			var centerOffsetY:Number=numberOfRows*planeSpacing*0.5-planeSpacing*0.5;

			for (var i:uint = 0; i < numberOfColumns; i++) {
				for (var j:uint = 0; j < numberOfRows; j++) {
					var plane:Plane=new Plane(new ColorMaterial(Math.random()*0xFFFFFF),planeSize,planeSize);
					plane.material.doubleSided=true;
					plane.x=i*planeSpacing-centerOffsetX;
					plane.y=j*planeSpacing-centerOffsetY;
					grid.addChild(plane);
					planeArray.push(plane);
				}
			}

		}

		override protected function onRenderTick(e:Event=null):void {
			//define how far the x mouse and y mouse positions are from the center of the stage
			var xDist:Number=mouseX-stage.stageWidth*0.5;
			var yDist:Number=mouseY-stage.stageHeight*0.5;

		
			// pyöritä yksittäisiä elementtejä:
			for (var i:uint = 0; i < numberOfColumns*numberOfRows; i++) {

				planeArray[i].rotationX=yDist*rotX;
				planeArray[i].rotationY=xDist*rotY;
		

			}	
			
			//grid.rotationX += (yDist * rotX - grid.rotationX) * easeOut;
			//grid.rotationY += (xDist * rotY - grid.rotationY) * easeOut;

			//EXAMPLE 4: ROTATE OBJECT WITH EASING
			//grid.rotationX += (yDist * rotX - grid.rotationX) * easeOut;
			//grid.rotationY += (xDist * rotY - grid.rotationY) * easeOut;

			super.onRenderTick();
		}
	}
}

 

tekstuuri slicet edelliseen

package {
	import flash.events.Event;
	// modified from  Jeff Winder, Paul Tondeur: Papervision3D Essentials book  MouseInteractionExample class
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;

	import org.papervision3d.materials.BitmapMaterial;

	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;

	import flash.events.MouseEvent;
	import flash.geom.Matrix;
	import flash.geom.Point;
	import flash.geom.Rectangle;
	import flash.net.URLRequest;


	public class PlaneGridSliceTextures extends BasicView {
		private var grid:DisplayObject3D;
		
		private var rotX:Number=1.5;//higher is more rotation of the grid in over x axis examples 3 and 4
		private var rotY:Number=1.5;//higher is more rotation of the grid over y axis in examples 3 and 4
		var planeArray:Array=[];
		var numberOfColumns:int=8; // plane elementtien määrä horisontaalisesti
		var numberOfRows:int=6; // plane elementtien määrä vertikaalisesti

		var kuvaSliceArray:Array=[];
		var kuvaBitMap:BitmapData;

		public function PlaneGridSliceTextures() {

			init();
			startRendering();
		}

		private function init():void {
			loadImage("puu.jpg");

		}
		private function luoGrid():void {

			grid = new DisplayObject3D();
			scene.addChild(grid);

			var planeSize:int=150;
			//spacing is the size of the plane plus the spacing in between them, should be higher than planeSize
			//if you don't want planes to overlap
			var planeSpacing:Number=150;
			//offset from center of viewport, to center grid position
			var centerOffsetX:Number=numberOfColumns*planeSpacing*0.5-planeSpacing*0.5;
			var centerOffsetY:Number=numberOfRows*planeSpacing*0.5-planeSpacing*0.5;
			//var material:BitmapMaterial=new BitmapMaterial(kuvaBitMap);
			var inx:uint=0;
			for (var i:uint = 0; i < numberOfColumns; i++) {
				for (var j:uint = 0; j < numberOfRows; j++) {

					var material:BitmapMaterial=new BitmapMaterial(kuvaSliceArray[inx]);
					inx++;
					var plane:Plane=new Plane(material,planeSize,planeSize);
					plane.material.doubleSided=true;
					plane.x=i*planeSpacing-centerOffsetX;
					plane.y=j*planeSpacing-centerOffsetY;
					grid.addChild(plane);
					plane.scaleY=-1;
					planeArray.push(plane);
				}
			}

		}

		private function loadImage(imagePath:String):void {
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
			loader.load(new URLRequest(imagePath));
		}

		private function paloitteleKuva(kuva:BitmapData):void {
			//trace("rect : Rectangle height "+kuva.rect.height);
			//trace("rect : Rectangle width "+kuva.rect.width);

			var kuvankorkeus:Number=kuva.rect.height;
			var kuvanleveys:Number=kuva.rect.width;

			var sliceLeveys:int=kuvanleveys/numberOfColumns;
			//trace("sliceLeveys "+sliceLeveys);
			var sliceKorkeus:int=kuvanleveys/numberOfRows;
			//trace("sliceKorkeus "+sliceKorkeus);
			for (var i:uint = 0; i < numberOfColumns; i++) {
				for (var j:uint = 0; j < numberOfRows; j++) {
					var sliceKuva:BitmapData=new BitmapData(sliceLeveys,sliceKorkeus);
					var rectangle:Rectangle=new Rectangle(i*sliceLeveys,j*sliceKorkeus,sliceLeveys,sliceKorkeus);
					//var rectangle:Rectangle=new Rectangle(1,1,100, 100);
					//trace("i*sliceLeveys "+i*sliceLeveys);
					//trace("j*kuvankorkeus "+j*kuvankorkeus);

					sliceKuva.copyPixels(kuva, rectangle, new Point());

					kuvaSliceArray.push(sliceKuva);
				}
			}
		}

		private function onImageLoaded(event:Event):void {
			var loaderInfo:LoaderInfo=event.target as LoaderInfo;
			var bitmap:Bitmap=loaderInfo.content as Bitmap;

			// kuva käännetään ylös alaisin:
			//http://board.flashkit.com/board/showthread.php?t=657082
			kuvaBitMap=bitmap.bitmapData;
			var flippedBitmap:BitmapData=new BitmapData(kuvaBitMap.width,kuvaBitMap.height,false,0xFFCC00);
			var flipVerticalMatrix:Matrix = new Matrix();
			flipVerticalMatrix.scale(1,-1);
			flipVerticalMatrix.translate(0,kuvaBitMap.height);
			flippedBitmap.draw(kuvaBitMap,flipVerticalMatrix);
			kuvaBitMap=flippedBitmap;

			//addChild(bitmap);
			//setChildIndex(bitmap, 0);
			paloitteleKuva(kuvaBitMap);
			luoGrid();// 3d planet luodaan vasta tässä

		}


		override protected function onRenderTick(e:Event=null):void {
			//define how far the x mouse and y mouse positions are from the center of the stage
			var xDist:Number=mouseX-stage.stageWidth*0.5;
			var yDist:Number=mouseY-stage.stageHeight*0.5;


			// pyöritä yksittäisiä elementtejä:
			for (var i:uint = 0; i < numberOfColumns*numberOfRows; i++) {
				planeArray[i].rotationX=yDist*rotX;
				planeArray[i].rotationY=xDist*rotY;
			}


			super.onRenderTick();
		}
	}
}

 

Pick color kuvasta paper explo:

package {

	import flash.events.Event;
	import flash.events.MouseEvent;

	//import flash.media.Sound; //äänet
	//import flash.net.URLRequest; //äänet http://www.foundation-flash.com/tutorials/as3sound/

	import org.papervision3d.events.InteractiveScene3DEvent;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.ColorMaterial;//
	import org.papervision3d.core.math.Number3D;
	import org.papervision3d.core.math.Number2D;
	import org.papervision3d.cameras.CameraType;
	import caurina.transitions.Tweener;


	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;




	public class PaperExploPickColor extends BasicView {

		private var plane:Plane;
		private var partikkelienLukumaara:uint=25;
		var pivotP:DisplayObject3D;
		var paperitArray=[];
		//var sound:Sound; //äänet
		var kuvaBitMap:BitmapData;

		public function PaperExploPickColor() {

			init();
			startRendering();
		}

		private function init():void {
			//sound=new Sound(new URLRequest("http://juy.fi/kurssit/actionscript/pv/tutorial/explosion.mp3")); //äänet
			//sound=new Sound(new URLRequest("explosion.mp3")); //äänet
			//stage.addEventListener(MouseEvent.CLICK, clikkaus);

			loadImage("puu.jpg");
		}
		private function luoPalaset(_x:Number =0,_y:Number = 0,_z:Number =0, vari:Number= 0xCCCCCC):void {

			pivotP = new DisplayObject3D();
			pivotP.x=_x;
			pivotP.y=_y;
			pivotP.z=_z;
			for (var i:uint = 0; i < partikkelienLukumaara; i++) {
				//var vari:Number=Math.random()*0xFFFFFF;// satunnainen väri syntyy tästä
				var material:ColorMaterial=new ColorMaterial(vari);
				plane=new Plane(material,80,80,1,1);
				material.interactive=true;
				Tweener.addTween(plane,{
				x:Math.random()*700-250,
				y:Math.random()*700-250,
				z:Math.random()*700-250,
				localRotationX:Math.random()*360,
				localRotationY:Math.random()*360,
				localRotationZ:Math.random()*360,
				time:1, transition:"easeOutSine"
				});

				pivotP.addChild(plane);
				plane.material.doubleSided=true;
				paperitArray.push(plane);

			}
			scene.addChild(pivotP);
		}

		function clikkaus(e:MouseEvent):void {
			//trace("klikkaus");

			var position3D:Number3D=CoordinateUtil.d3PositionBasedScreenCoordinate(this.cameraAsCamera3D,new Number2D(viewport.containerSprite.mouseX,viewport.containerSprite.mouseY),CoordinateUtil.XY_PLANE);
			//position3D.z= camera.z+1000;
			luoPalaset(position3D.x,position3D.y,position3D.z);
			trace("position3D.z "+position3D.z);
			//sound.play(); //äänet
		}

		override protected function onRenderTick(e:Event=null):void {
			//pivotP.localRotationY++;
			super.onRenderTick();
		}


		private function loadImage(imagePath:String):void {
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);
			loader.load(new URLRequest(imagePath));
		}

		private function onImageLoaded(event:Event):void {
			var loaderInfo:LoaderInfo=event.target as LoaderInfo;
			var bitmap:Bitmap=loaderInfo.content as Bitmap;

			kuvaBitMap=bitmap.bitmapData;
			addChild(bitmap);
			setChildIndex(bitmap, 0);
			stage.addEventListener(MouseEvent.CLICK, onStageClick);
		}

		private function onStageClick(event:MouseEvent):void {
			var x:Number=event.localX;
			var y:Number=event.localY;
			// grabs color 
			var color:uint=kuvaBitMap.getPixel(x,y);

			var position3D:Number3D=CoordinateUtil.d3PositionBasedScreenCoordinate(this.cameraAsCamera3D,new Number2D(viewport.containerSprite.mouseX,viewport.containerSprite.mouseY),CoordinateUtil.XY_PLANE);
			//position3D.z= camera.z+1000;
			luoPalaset(position3D.x,position3D.y,position3D.z,color);
			//trace("position3D.z "+position3D.z);

		}
	}
}
 

 

Animoitu generoitu käytävä esimerkki kuutio primitiivillä

package {
	import flash.events.Event;

	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.utils.MaterialsList;

	import org.papervision3d.materials.ColorMaterial;

	import org.papervision3d.objects.primitives.Cube;
	import caurina.transitions.Tweener;

	public class Kaytava extends BasicView {

		private var cube:Cube;
		var materialsList:MaterialsList;
		public function Kaytava() {
			init();
			startRendering();
		}

		private function init():void {

			var red:ColorMaterial=new ColorMaterial(0xFF0000);
			var blue:ColorMaterial=new ColorMaterial(0x0000FF);
			var green:ColorMaterial=new ColorMaterial(0x00FF00);
			materialsList = new MaterialsList();
			materialsList.addMaterial(red,"front");
			materialsList.addMaterial(red,"back");
			materialsList.addMaterial(blue,"left");
			materialsList.addMaterial(blue,"right");
			materialsList.addMaterial(green,"top");
			materialsList.addMaterial(green,"bottom");

		}

		override protected function onRenderTick(e:Event=null):void {
			cube=new Cube(materialsList,300,20,300,1,1,1,Cube.ALL,Cube.FRONT+Cube.BACK);
			cube.z=2500;
			cube.x=Math.random()*50-25;
			scene.addChild(cube);
			Tweener.addTween(cube,{
			z:-1500,
			time:5, transition:"linear"
			});

			super.onRenderTick();
		}
	}
}

Sama kuin edellä cylinder primitiivillä

package {
	import flash.events.Event;

	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.objects.primitives.Cylinder;
	import caurina.transitions.Tweener;

	public class PyoreaKaytava extends BasicView {

		private var cube:Cube;
		private var cylinder:Cylinder;
		var materialsList:MaterialsList;
		var colormaterial:ColorMaterial;
		var frameCount:int;
		public function PyoreaKaytava() {
			init();
			startRendering();
		}

		private function init():void {

			colormaterial=new ColorMaterial(0x00CCCC);

		}

		override protected function onRenderTick(e:Event=null):void {
			frameCount++;
			if (frameCount%5==0) {
				cylinder=new Cylinder(colormaterial,300,20,14,1,-1,false,false);
				cylinder.material.doubleSided=true;
				cylinder.localRotationX=-90;
				cylinder.z=2500;
				cylinder.x=Math.random()*50-25;
				scene.addChild(cylinder);
				Tweener.addTween(cylinder,{
				z:-1500,
				time:5, transition:"linear"
				});
			}
			super.onRenderTick();
		}
	}
}