Papervision3D tutorial 5

 

Interaktiivisuus kuutioilla:

Boxespohja:

 

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

	import org.papervision3d.materials.utils.MaterialsList;
	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 Boxes extends BasicView {

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

		private var angle:Number=0;

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


		private function init():void {

			//viewport.interactive=true;
			
			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"
				});
				
				pivotP.addChild(plane);
				plane.material.doubleSided=true;

			}
			scene.addChild(pivotP);
		}


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

 

 

lisätään edelliseen:

 

import org.papervision3d.events.InteractiveScene3DEvent;

init metodin silmukassa seuraavien rivien:

plane=new Cube(materialsList,80,80,80,2,2,2);
material.interactive = true;

jälkeen lisätään tapahtumakäsittelijä :

plane.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onClick); 
lopuksi init metodin jälkeen uusi metodi jossa klikkaustapahtumalle annetaan removeChild toimito:
	function onClick(e:InteractiveScene3DEvent):void {
			trace("klikkaus");
			pivotP.removeChild(e.target as DisplayObject3D);
			}

 

 

3D Teksti

lisätään teksti edelliseen:

	import org.papervision3d.materials.special.Letter3DMaterial;
	import org.papervision3d.typography.Font3D;
	import org.papervision3d.typography.Text3D;
	import org.papervision3d.typography.fonts.HelveticaBold;

luokka lohkoon:

		private var material:Letter3DMaterial;
		private var font3D:Font3D;
		private var text3D:Text3D;

init metodiin

pivotP = new DisplayObject3D();

rivin jälkeen:

			var text:String="klikkaa kuutioita";
			material=new Letter3DMaterial(0x000000);
			font3D = new HelveticaBold();
			//Text3D instance:
			text3D=new Text3D(text,font3D,material);
			text3D.y=300;
			text3D.localRotationY=-30;
			text3D.scale=2;
			text3D.material.doubleSided=true;
			pivotP.addChild(text3D);

            
            

 

Filtteri efektit

lisätään efekti edelliseen:

import flash.filters.BlurFilter; // effects
	import flash.filters.GlowFilter;
	import flash.filters.DropShadowFilter; //effects
	import flash.filters.BitmapFilterQuality; //effects
	import org.papervision3d.view.layer.ViewportLayer; //effects
filterin muuttuja init metodiin ennen silmukkaa
var blur:BlurFilter = new BlurFilter(40,40,BitmapFilterQuality.LOW);

silmukassa

plane=new Cube(materialsList,80,80,80,2,2,2); rivin jälkeen luodaan viewportlayer ja kytketään siihen filtteri
var cubeLayer:ViewportLayer = viewport.getChildLayer(plane);
cubeLayer.filters = [blur]; 

 


 

3D viivat

lisää Pv3dLuokkaPohja luokkaan (ks. tutorial01 kohta 4.2)

	import org.papervision3d.core.geom.Lines3D;
	import org.papervision3d.core.geom.renderables.Line3D;
	import org.papervision3d.core.geom.renderables.Vertex3D;
	import org.papervision3d.materials.special.LineMaterial;
luokkaan muuttuja
private var lines:Lines3D;
lisätään init metodiin kaksi viivaa:
var blueMaterial:LineMaterial = new LineMaterial(0x0000FF,0.6);
			
			//Lines3D on  DisplayObject3D johon Line3D instanssit lisätään
            lines = new Lines3D(blueMaterial);
            scene.addChild(lines);
            
            //sininen viiva:
     		var v0:Vertex3D = new Vertex3D(-300,0,0);
           	var v1:Vertex3D = new Vertex3D(-300,300,0);
           	var blueLine:Line3D = new Line3D(lines,blueMaterial,3,v0,v1);
           	lines.addLine(blueLine);
			
			//punainen viiva: lyhyt syntaksi
			var redLine:Line3D= new Line3D(lines,new LineMaterial(0xFF0000,1),3,new Vertex3D(0,0,0),new Vertex3D(-300,0,0))
			lines.addLine(redLine);