Papervision3D tutorial 2

 

Materiaalit

 

 

WireframeMaterial

import org.papervision3d.materials.WireframeMaterial;
    
var wireMaterial:WireframeMaterial = new WireframeMaterial();
    
var wirematerial:WireframeMaterial = new WireframeMaterial(0xFFFF66,1,2); 

ColorMaterial

import org.papervision3d.materials.ColorMaterial; //
    
var material:ColorMaterial=new ColorMaterial(0x3333FF); // 

Bitmap materiaali

3D nopan rakentelua:

koodilla luotu bitmap materiaali

package {
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.events.Event;


	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.special.CompositeMaterial;

	public class BitmapMaterialShapeExample extends BasicView {

		var plane:Plane;
		public function BitmapMaterialShapeExample() {
			stage.frameRate=40;

			init();
			startRendering();
		}

		private function init():void {

			var wireMaterial:WireframeMaterial=new WireframeMaterial(0x000000,1,2);
			var material:CompositeMaterial = new CompositeMaterial();

			var circle:Shape = new Shape();
			circle.graphics.beginFill(0x7733FF);
			circle.graphics.drawCircle( 33,  33,20);

			var bmp:BitmapData=new BitmapData(200,200,true,0x0);
			bmp.draw(circle);

			var bmpMaterial:BitmapMaterial=new BitmapMaterial(bmp);
			material.smooth=true;
			material.addMaterial(bmpMaterial);
			material.addMaterial(wireMaterial);
			plane=new Plane(material,600,600,3,3);
			scene.addChild(plane);
		}

		override protected function onRenderTick(e:Event=null):void {

			super.onRenderTick();
		}
	}
}

 

BitmapFileMaterial (lisää monisteen esimerkkiin 5.1.)

import org.papervision3d.materials.BitmapFileMaterial;
var material:BitmapFileMaterial = new BitmapFileMaterial("assets/puu.jpg");
plane=new Plane(material,700,700,3,2);

BitmapAssetMaterial

 

import org.papervision3d.materials.BitmapAssetMaterial;

var material:BitmapAssetMaterial = new BitmapAssetMaterial("sun");

Aurinko maa ja tekstuurit

package {
	import flash.events.Event;
	
	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.materials.WireframeMaterial; //
	import org.papervision3d.materials.ColorMaterial; //
	import org.papervision3d.materials.BitmapFileMaterial;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.BitmapAssetMaterial;

	public class NestingEsimerkki extends BasicView
	{
		private var aurinko:Sphere;
		private var planeetta:Sphere;
		private var kuu:Sphere;
		var pivotP:DisplayObject3D;
		var planeettaPyorimisnopeusAkselinYmpari:Number = 0.5;
		var kuunKiertoNopeus:Number = 7;
		
		public function NestingEsimerkki()
		{
			init();
			startRendering();
		}
		
		private function init():void
		{
			//EarthTM0360.jpg
			pivotP = new DisplayObject3D();
			var bmpmaterial:BitmapFileMaterial = new BitmapFileMaterial("assets/EarthTM0360.jpg");
			var sunmaterial:BitmapAssetMaterial = new BitmapAssetMaterial("sun");
			var wirematerial:WireframeMaterial = new WireframeMaterial(0xFFFF66,1,2); //
			var material:ColorMaterial=new ColorMaterial(0x3333FF); //
			var wirematerial2:WireframeMaterial = new WireframeMaterial(0x3333FF,1,2); //
			var kuuwirematerial:WireframeMaterial = new WireframeMaterial(0xCCCCCC,1,2); //	
			aurinko = new Sphere(sunmaterial, 150,26,20);	
			scene.addChild(aurinko);
			planeetta = new Sphere(bmpmaterial, 120,12,8);
			planeetta.x = 500;
			aurinko.addChild(planeetta);
			pivotP.x = 500; //
			aurinko.addChild(pivotP); //
			
			kuu = new Sphere(kuuwirematerial, 10, 6,6);
			kuu.x = 150;
			//planeetta.addChild(kuu);
			pivotP.addChild(kuu);//
		}
		
		override protected function onRenderTick(e:Event=null):void
		{
			aurinko.localRotationY++;
			planeetta.localRotationY+= planeettaPyorimisnopeusAkselinYmpari;
			pivotP.localRotationY+= kuunKiertoNopeus;
			super.onRenderTick();
		}
	}
} 

 

MovieAssetMaterial

 

import flash.geom.Rectangle;
import org.papervision3d.materials.MovieAssetMaterial;
import org.papervision3d.materials.utils.PrecisionMode;

var mcmaterial:MovieAssetMaterial=new MovieAssetMaterial("aurinkotekstuurimc",false,true,false,true);
mcmaterial.doubleSided=true;
mcmaterial.rect=new Rectangle(0,0,200,200);
mcmaterial.smooth=true;
mcmaterial.precisionMode = PrecisionMode.STABLE;

Tiletys:

 import org.papervision3d.events.FileLoadEvent; 
 		private function init():void
		{	
			var material:BitmapFileMaterial = new BitmapFileMaterial("assets/tiilit.jpg");
			material.addEventListener(FileLoadEvent.LOAD_COMPLETE,loadComplete);
		
			plane = new Plane(material,1024,512);
			scene.addChild(plane);
		}
		
		private function loadComplete(e:FileLoadEvent):void
		{
			var material:BitmapFileMaterial = BitmapFileMaterial(e.target);
			
			material.tiled = true;
			material.maxU = 8;
			material.maxV = 4;
		}
		

 

3D Noppa - MovieMaterial

(koodi vaatii kirjastoon movieclipin jonka AS Export Class: "Alkunappi" ja jossa "nappi" niminen button instanssi)

        package {
	import flash.display.BitmapData;
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.display.MovieClip;


	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.MovieMaterial;
	import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.utils.PrecisionMode;
	import org.papervision3d.materials.utils.MaterialsList;
	/*import org.papervision3d.materials.special.CompositeMaterial;
	import org.papervision3d.materials.ColorMaterial; // 
	import org.papervision3d.materials.WireframeMaterial;*/

	public class Noppa3DMovieMaterial extends BasicView {

		var noppa1:Array = [0, 0, 0,
		0, 1, 0,
		0, 0, 0];
		var noppa2:Array = [1, 0, 0,
		0, 0, 0,
		0, 0, 1];
		var noppa3:Array = [1, 0, 0,
		0, 1, 0,
		0, 0, 1];
		var noppa4:Array = [1, 0, 1,
		0, 0, 0,
		1, 0, 1];
		var noppa5:Array =[1, 0, 1,
		0, 1, 0,
		1, 0, 1];
		var noppa6:Array = [1, 0, 1,
		1, 0, 1,
		1, 0, 1];

		var noppienSilmaLuvutArray:Array=[];
		var tekstuurinKoko=200;
		//var plane:Plane;
		var kuutionSivunNimet:Array=['front',"back","left","right","top","bottom"];
		private var cube:Cube;
		private var pyorita:Boolean=false;

		var materiaalit:Array=[];
		var materialsList:MaterialsList;
		var framecount:uint;

		public function Noppa3DMovieMaterial() {

			init();
			startRendering();
		}

		private function init():void {

			noppienSilmaLuvutArray.push(noppa1);
			noppienSilmaLuvutArray.push(noppa2);
			noppienSilmaLuvutArray.push(noppa3);
			noppienSilmaLuvutArray.push(noppa4);
			noppienSilmaLuvutArray.push(noppa5);
			noppienSilmaLuvutArray.push(noppa6);

			materialsList = new MaterialsList();

			viewport.interactive=true;
			for (var i:uint = 0; i <6; i++) {
				var circles:Sprite = new Sprite();
				circles=piirraNoppaSivu(noppienSilmaLuvutArray[i]);
				/*var bmp:BitmapData=new BitmapData(tekstuurinKoko,tekstuurinKoko,true,0x0);
				bmp.draw(circles);
				var bmpMaterial:BitmapMaterial=new BitmapMaterial(bmp);*/
				var material:MovieMaterial=new MovieMaterial(circles);
				materiaalit.push(material);
				//material.smooth = true;
				materialsList.addMaterial(materiaalit[i],kuutionSivunNimet[i]);
			}

			var mamaterial:MovieAssetMaterial=new MovieAssetMaterial("Alkunappi",false,true,false,true);
			mamaterial.precisionMode=PrecisionMode.STABLE;
			materialsList.addMaterial(mamaterial,'back');
			mamaterial.interactive=true;

			/*var noppaTulos:uint=Math.floor(Math.random()*6);//satunnaisluku 1-6
			
			trace("noppaTulos "+noppaTulos+1);*/

			cube=new Cube(materialsList,400,400,400);
			scene.addChild(cube);

			MovieClip(mamaterial.movie).getChildByName("nappi").addEventListener( MouseEvent.CLICK,click);
			MovieClip(mamaterial.movie).getChildByName("nappi").addEventListener( MouseEvent.MOUSE_OVER,mouseOver);
			MovieClip(mamaterial.movie).getChildByName("nappi").addEventListener( MouseEvent.MOUSE_OUT,mouseOut);
		}

		function piirraNoppaSivu(noppaArray:Array ):Sprite {
			var pallot:Sprite = new Sprite();
			var a:uint;
			//taustaväri grafiikka:
			pallot.graphics.beginFill(0xCCCCCC);
			pallot.graphics.drawRect(0,0,200,200);
			for (var i:uint=0; i<3; i++) {
				for (var j:uint=0; j<3; j++) {
					a=i+j*3;
					if (noppaArray[a]==1) {
						var circle:Shape = new Shape();
						circle.graphics.beginFill(0x7733FF);
						circle.graphics.drawCircle( 0,  0,20);
						//var ympyra:Pallo = new Pallo();
						circle.x=i*tekstuurinKoko/3+tekstuurinKoko/6;
						circle.y=j*tekstuurinKoko/3+tekstuurinKoko/6;
						pallot.addChild(circle);
					}
				}
			}
			return pallot;
		}

		private function mouseOver(e:MouseEvent):void {
			viewport.buttonMode=true;
			//MovieClip(e.target).gotoAndStop(2);
		}
		private function mouseOut(e:MouseEvent):void {
			viewport.buttonMode=false;
			//MovieClip(e.target).gotoAndStop(1);
		}

		private function click(e:MouseEvent):void {
			trace("klikkaus");
			pyorita=true;
			framecount = 0;


		}
		override protected function onRenderTick(e:Event=null):void {
			
			if (pyorita) {
				framecount++;
				cube.localRotationX+=4; //Math.floor(Math.random()*7+2
				cube.localRotationY+=4;
				cube.localRotationZ+=4;
			}
			if (framecount>30) {
				cube.replaceMaterialByName(materiaalit[1],'back');
			}
			super.onRenderTick();
		}
	}
}

Tweener noppaan

 import caurina.transitions.Tweener;
		private function click(e:MouseEvent):void {
			trace("klikkaus");
			//pyorita=true;
			framecount=0;
/*			xrotaspeed=Math.floor(Math.random()*7+2);//Math.floor(Math.random()*7+2
			yrotaspeed=Math.floor(Math.random()*7+2);
			zrotaspeed=Math.floor(Math.random()*7+2);*/
			var pyorahdyskulma:int = (Math.floor(Math.random()*14)+2)*90;
			trace("pyorahdyskulma "+pyorahdyskulma);			
				Tweener.addTween(cube,{
					localRotationY:cube.localRotationY + pyorahdyskulma,
					time:1
				});

Random Planet
package {
	import flash.events.Event;

	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.materials.ColorMaterial;//

	public class PaperExplosionTest extends BasicView {
		
		private var plane:Plane;
		private var partikkelienLukumaara:uint=25;
		var pivotP:DisplayObject3D;
		
		public function PaperExplosionTest() {
			init();
			startRendering();
		}

		private function init():void {

			pivotP = new DisplayObject3D();
			for (var i:uint = 0; i < partikkelienLukumaara; i++) {
				 var vari:Number=Math.random()*0xFFFFFF;
				var material:ColorMaterial=new ColorMaterial(vari);// 
				plane=new Plane(material,80,80,1,1);

				plane.x=Math.random()*500-250;
				plane.y=Math.random()*500-250;
				plane.z=Math.random()*500-250;
				plane.localRotationX=Math.random()*360;
				plane.localRotationY=Math.random()*360;
				plane.localRotationZ=Math.random()*360;
				pivotP.addChild(plane);
				plane.material.doubleSided=true;
			}
			scene.addChild(pivotP);

		}

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