Papervision3D tutorial 1

Papervision luokkakirjaston asentaminen Flashin käyttöön:

1.1.) lataa uusin zippi osoitteesta:
http://code.google.com/p/papervision3d/downloads/list
Papervision3D_2.1.932.zip (19.2.2010)
1.2.) pura pakkaus
1.3.) tee omaan työkansioosi kansio nimeltään esim: "papervision_lahdekoodi"
1.4.) laita src kansio edelliseen kansioon
1.5.) avaa Flash
1.6.) valitse Edit > Preferences > Actionscript > Actionscript 3.0 Settings nappi


1.7.) Klikka + nappia Source path osion kohdalla ja klikkaa sen jälkeen kansio kuvaketta
1.8.) valitse papervision_lahdekoodi kansiossa oleva src kansio
1.9.) paina OK

2) testaus
2.1.) tee uusi kansio esim "ekatesti"
2.2.) avaa uusi FLA tiedosto ja tallenna se kansioon
2.3.) kopioi seuraava koodi .as tiedostoon

 

package {
	import flash.display.Sprite;
	import flash.events.Event;
	
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;

	public class TestApplication extends Sprite
	{
		private var scene:Scene3D;
		private var viewport:Viewport3D;
		private var camera:Camera3D;
		private var renderEngine:BasicRenderEngine;
		private var sphere:Sphere;
		
		public function TestApplication()
		{
		
			scene = new Scene3D();
			camera = new Camera3D();
			
			sphere = new Sphere();
			scene.addChild(sphere);
			
			viewport = new Viewport3D();
			addChild(viewport);
			
			renderEngine = new BasicRenderEngine();
			renderEngine.renderScene(scene, camera, viewport);
			addEventListener(Event.ENTER_FRAME, render);
		}
		
		private function render(e:Event):void
		{
			sphere.localRotationY +=1;
			renderEngine.renderScene(scene, camera, viewport);
		}
	}
}


2.4.) anna flash dokumentin luokka nimeksi: TestApplication
2.5.) testaa (cntr+enter)

 

3) Hello World ===================

package {

	import flash.display.Sprite;

	public class Testi extends Sprite 
	{
		public function Testi() {
			trace("Moi moi");
		}
	}
}

 

4.2) Luokkapohja ===================

package {
	import flash.events.Event;
	
	import org.papervision3d.view.BasicView;

	public class Pv3dLuokkaPohja extends BasicView
	{
		public function Pv3dLuokkaPohja()
		{
			init();
			startRendering();
		}
		
		private function init():void
		{
			
		}
		
		override protected function onRenderTick(e:Event=null):void
		{
			super.onRenderTick();
		}
	}
} 

 

Primitiivit

5.1.) =============== Plane ==================

package lohkoon:

import org.papervision3d.objects.primitives.Plane;
class lohkoon:

private var plane:Plane;
init metodiin:

plane=new Plane(null,300,300,1,1);
scene.addChild(plane);

Swf näyttää tältä:

Planetest swf screen capture

5.10. =============== Kuutio ==================

package lohkoon:

  import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Cube;
luokkaan:

private var cube:Cube;
init metodiin:

 private function init():void {
var red:ColorMaterial=new ColorMaterial(0xFF0000);
var blue:ColorMaterial=new ColorMaterial(0x0000FF);
var green:ColorMaterial=new ColorMaterial(0x00FF00);
var materialsList: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");
cube=new Cube(materialsList,300,300,300);
scene.addChild(cube);
}

onRenderTick metodiin:

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

Kuutio swf näyttää tältä (klikkaa kuvaa):

Kuutio swf scren capture

 

5.14. ===== ryhmittelyhierarkiat (pivot point) =============

package {
	import flash.events.Event;

	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Cylinder;
	import org.papervision3d.view.BasicView;

	public class PivotPointRyhmittely extends BasicView {
		private var pivotDO3D:DisplayObject3D;
		var cylinder1:Cylinder;
		var cylinder2:Cylinder;
		var cylinder3:Cylinder;
		var cylinder4:Cylinder;
		public function PivotPointRyhmittely() {
			init();
			startRendering();
		}

		private function init():void {
			pivotDO3D = new DisplayObject3D();
			scene.addChild(pivotDO3D);
			cylinder1=new Cylinder(null,70,400,7,2,-1,false,true);
			cylinder2=new Cylinder(null,70,400,7,2,-1,false,true);
			cylinder3=new Cylinder(null,70,400,7,2,-1,false,true);
			cylinder4=new Cylinder(null,70,400,7,2,-1,false,true);
			cylinder1.x=-300;
			cylinder2.x=300;
			cylinder3.x=-300;
			cylinder4.x=300;
			cylinder1.z=300;
			cylinder2.z=-300;
			cylinder3.z=-300;
			cylinder4.z=300;
			pivotDO3D.addChild(cylinder1);
			pivotDO3D.addChild(cylinder2);
			pivotDO3D.addChild(cylinder3);
			pivotDO3D.addChild(cylinder4);
			cylinder1.material.doubleSided=true;
			cylinder2.material.doubleSided=true;
			cylinder3.material.doubleSided=true;
			cylinder4.material.doubleSided=true;
		}

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

	}
}

Swf lopputuolos näyttää tältä (klikkaa kuvaa):

papervision3d tutorial 1 swf screngrab


Hierarkia (Nesting)

Auriko maa ja kuu kokeilu:

   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; //

	public class NestingEsimerkki extends BasicView
	{
		private var aurinko:Sphere;
		private var planeetta:Sphere;
		private var kuu:Sphere;
		
		public function NestingEsimerkki()
		{
			init();
			startRendering();
		}
		
		private function init():void
		{
			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(wirematerial, 150,26,20);	
			scene.addChild(aurinko);
			planeetta = new Sphere(wirematerial2, 50,12,8);
			planeetta.x = 500;
			aurinko.addChild(planeetta);
			
			kuu = new Sphere(kuuwirematerial, 10, 6,6);
			kuu.x = 100;
			planeetta.addChild(kuu);
		}
		
		override protected function onRenderTick(e:Event=null):void
		{
			aurinko.localRotationY++;
			planeetta.localRotationY+=5;
			super.onRenderTick();
		}
	}
} 

Swf screen grab (klikkaa kuvaa):

Swf screen grab

 

Verteksit

package {
// siirtää joka kolmatta verteksiä 90 yksikköä
	import flash.events.Event;

	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Cylinder;
	import org.papervision3d.view.BasicView;

	public class Verteksit extends BasicView {

		private var cylinder1:Cylinder;

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

		private function init():void {

			cylinder1=new Cylinder(null,270,700,7,2,-1,false,true);
			scene.addChild(cylinder1);
			cylinder1.material.doubleSided=true;
			trace("cylinder1.geometry.vertices.length "+cylinder1.geometry.vertices.length);
			
			for (var i:uint = 0; i< cylinder1.geometry.vertices.length; i++) {
				trace("cylinder1.geometry.vertices["+i+"].x "+cylinder1.geometry.vertices[i].x);
				if (i%3==0) { // 0,1
					cylinder1.geometry.vertices[i].x=cylinder1.geometry.vertices[i].x+90;
				}
			}
		}

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

	}
}

Swf screen grab (klikkaa kuvaa):

Swf screen grab

verteksit2: lisätään palloja verteksien kordinaatteihin

package {
	import flash.events.Event;

	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.objects.primitives.Cylinder;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.view.BasicView;

	public class Verteksit2 extends BasicView {

		private var cylinder1:Cylinder;
		var sphere:Sphere;
		var counteri:uint=0;
		var framecounter:uint;

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

		private function init():void {
			counteri=0;
			cylinder1=new Cylinder(null,270,700,7,2,-1,false,true);
			scene.addChild(cylinder1);

			cylinder1.material.doubleSided=true;

		}

		override protected function onRenderTick(e:Event=null):void {
			framecounter++;
			if (framecounter%5==0&&counteri<cylinder1.geometry.vertices.length) 
			{
				sphere=new Sphere(null,30,7,7);
				 	cylinder1.addChild(sphere);
				sphere.x=cylinder1.geometry.vertices[counteri].x;
				sphere.y=cylinder1.geometry.vertices[counteri].y;
				sphere.z=cylinder1.geometry.vertices[counteri].z;

				counteri++;

			}
			cylinder1.localRotationZ++;
			cylinder1.localRotationY++;
			super.onRenderTick();
		}

	}
}

Swf screen grab:

Swf screen grab