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; //effectsfilterin 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 filtterivar 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);