Papervision3D tutorial 2
Materiaalit
- Rautalankamalli (Wireframe) materiaali
- Väri (Color) materiaali
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();
}
}
}