Archive for the 'Papervision' Category

Using Papervision Object Parsers

Help here.

And fixing them for CS4.

Wooden box code

Files here.

package {
	import flash.display.*;
	import flash.events.*;
	//
	import caurina.transitions.Tweener;
	//
	import org.papervision3d.view.BasicView;
	import org.papervision3d.objects.primitives.*;
	//import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.utils.*;
	//import org.papervision3d.materials.MovieAssetMaterial;
	import org.papervision3d.materials.shaders.*;
	import org.papervision3d.materials.shadematerials.*;

	public class KeyFlip extends MovieClip {
		private var spinning:Boolean;
		private var cube:Cube;
		private var floorPlane:Plane;
		private var boxMat1:MovieAssetMaterial;
		private var boxMat2:MovieAssetMaterial;
		private var boxMat3:MovieAssetMaterial;
		private var boxMat4:MovieAssetMaterial;
		private var boxMat5:MovieAssetMaterial;
		private var boxMat6:MovieAssetMaterial;
		private var flooorMat:MovieAssetMaterial;
		private var materialsList:MaterialsList;
		private var papervision:BasicView;
		private var light:PointLight3D;
		private var flatShader:FlatShader;
		private var shadedMaterial1:ShadedMaterial;
		private var shadedMaterial2:ShadedMaterial;
		private var shadedMaterial3:ShadedMaterial;
		private var shadedMaterial4:ShadedMaterial;
		private var shadedMaterial5:ShadedMaterial;
		private var shadedMaterial6:ShadedMaterial;

		public function KeyFlip():void {
			//Listeners:
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, false,0,true);
			addEventListener(Event.ENTER_FRAME,render);

			//Init Papervision:
			initPapervision();
		}

		private function initPapervision():void {
			//BasicView:
			papervision=new BasicView(1,1,true,true);
			addChild(papervision);

			//Light:
			light= new PointLight3D(true);
			light.x=-454
			light.y=454

			//Materials:
			//Needs major work to still be able to get to and change the frame of each material
			boxMat1=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat1.movie).gotoAndStop(1);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial1 = new ShadedMaterial(boxMat1, flatShader);

			boxMat2=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat2.movie).gotoAndStop(2);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial2 = new ShadedMaterial(boxMat2, flatShader);

			boxMat3=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat3.movie).gotoAndStop(3);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial3 = new ShadedMaterial(boxMat3, flatShader);

			boxMat4=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat4.movie).gotoAndStop(4);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial4 = new ShadedMaterial(boxMat4, flatShader);

			boxMat5=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat5.movie).gotoAndStop(5);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial5 = new ShadedMaterial(boxMat5, flatShader);

			boxMat6=new MovieAssetMaterial("WoodTexture",false,true,true);
			MovieClip(boxMat6.movie).gotoAndStop(6);
			flatShader = new FlatShader(light, 0xFFFFFF, 0x000000);
        	shadedMaterial6 = new ShadedMaterial(boxMat6, flatShader);

			flooorMat=new MovieAssetMaterial("ShadowPlane");

			//MaterialList:
			materialsList = new MaterialsList();
			materialsList.addMaterial(shadedMaterial1, "front" );
			materialsList.addMaterial(shadedMaterial2, "back" );
			materialsList.addMaterial(shadedMaterial3, "left" );
			materialsList.addMaterial(shadedMaterial4, "right" );
			materialsList.addMaterial(shadedMaterial5, "top" );
			materialsList.addMaterial(shadedMaterial6, "bottom" );

			//Primitives:
			cube=new Cube(materialsList,200,200,200,4,4,4);
			papervision.scene.addChild(cube);

			floorPlane=new Plane(flooorMat,286,286,4,4);
			floorPlane.rotationX=90;
			floorPlane.y=-140;
			papervision.scene.addChild(floorPlane);

			//Camera:
			papervision.camera.focus=100;
			papervision.camera.zoom=10;
			papervision.camera.y=376;
			papervision.camera.x=-450;
			papervision.camera.lookAt(cube);
		}

		private function keyDownHandler(e:KeyboardEvent):void {
			if (! spinning) {
				//Left
				if (e.keyCode==37) {
					spinning=true;
					Tweener.addTween(cube,{rotationY:cube.rotationY+90,time:.5,transition:"easeInOutExpo",onComplete:resetSpinning});
					Tweener.addTween(floorPlane,{rotationY:floorPlane.rotationY+90,time:.5,transition:"easeInOutExpo"});
				}
				//Up
				if (e.keyCode==38) {
					spinning=true;
					Tweener.addTween(cube,{rotationX:cube.rotationX+90,time:.5,transition:"easeInOutExpo",onComplete:resetSpinning});
					Tweener.addTween(floorPlane,{scaleY:.5,time:.25,transition:"easeInExpo"});
					Tweener.addTween(floorPlane,{scaleY:1,time:.25,transition:"easeOutExpo",delay:.25});
				}
				//Right
				if (e.keyCode==39) {
					spinning=true;
					Tweener.addTween(cube,{rotationY:cube.rotationY-90,time:.5,transition:"easeInOutExpo",onComplete:resetSpinning});
					Tweener.addTween(floorPlane,{rotationY:floorPlane.rotationY-90,time:.5,transition:"easeInOutExpo"});
				}
				//Down
				if (e.keyCode==40) {
					spinning=true;
					Tweener.addTween(cube,{rotationX:cube.rotationX-90,time:.5,transition:"easeInOutExpo",onComplete:resetSpinning});
					Tweener.addTween(floorPlane,{scaleY:.5,time:.25,transition:"easeInExpo"});
					Tweener.addTween(floorPlane,{scaleY:1,time:.25,transition:"easeOutExpo",delay:.25});
				}
			}
		}

		private function resetSpinning():void {
			spinning=false;
		}

		private function render(e:Event):void {
			xRotation.text="Rotation X: "+cube.rotationX + " : " + cube.rotationX%360;
			yRotation.text="Rotation Y: "+cube.rotationY + " : " + cube.rotationY%360;
			papervision.singleRender();
		}
	}
}

VizualPV3D – Papervision made visual

http://www.juxtinteractive.com/work/vizualpv3d/

Papervision help

Great selection of some important papervision examples: http://papervisiontut.sourceforge.net/

Papervision core concepts and template

Still working on this… I’ll put up some good descriptions to help everyone with Papervision soon but there’s some solid concepts in this structure:

//PAPERVISION IMPORTS
import org.papervision3d.view.BasicView;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.materials.*;
import org.papervision3d.events.InteractiveScene3DEvent;

//BASIC VIEW SCENE SETUP
//BasicView(viewportWidth:Number = 640, viewportHeight:Number = 480, scaleToStage:Boolean = true, interactive:Boolean = false, cameraType:String = "Target")
var papervision:BasicView = new BasicView(1,1,true,true);
papervision.viewport.buttonMode=true;

//Set camera so that pixel dimensions match - a plane of 300 x 300 will render as 300px x 300px
papervision.camera.focus=100;
papervision.camera.zoom=10;
addChild(papervision);

//MATERIALS
//BitmapAssetMaterial(linkageID:String, precise:Boolean = false)
var bitmapAssetMat:BitmapAssetMaterial = new BitmapAssetMaterial("GrassTexture");
bitmapAssetMat.smooth=true;
bitmapAssetMat.oneSide=false;
bitmapAssetMat.interactive=true;

//BitmapFileMaterial(url:String = "", precise:Boolean = false)
var bitmapFileMat:BitmapFileMaterial = new BitmapFileMaterial("GrassTexture.jpg");
bitmapFileMat.smooth=true;
bitmapFileMat.oneSide=false;

//ColorMaterial(color:Number = 0xFF00FF, alpha:Number = 1, interactive:Boolean = false)
var colorMat:ColorMaterial = new ColorMaterial(0x333333);
colorMat.interactive=true;
colorMat.oneSide=false;

//MovieAssetMaterial(linkageID:String = "", transparent:Boolean = false, animated:Boolean = false, createUnique:Boolean = false, precise:Boolean = false)
var movieAssetMat:MovieAssetMaterial = new MovieAssetMaterial("GrassTextureMovie",false,true);
movieAssetMat.smooth=true;
movieAssetMat.oneSide=false;

//WireframeMaterial(color:Number = 0xFF00FF, alpha:Number = 100, thickness:Number = 0)
var wireframeMat:WireframeMaterial = new WireframeMaterial(0x333333);
wireframeMat.interactive=true;
wireframeMat.oneSide=false;

//SETUP PLANE
//Plane(material:MaterialObject3D = null, width:Number = 0, height:Number = 0, segmentsW:Number = 0, segmentsH:Number = 0)
var plane1:Plane = new Plane(colorMat,300,300,3,3);
papervision.scene.addChild(plane1);

//Plane mouse interaction
plane1.addEventListener( InteractiveScene3DEvent.OBJECT_OVER, onOver );
plane1.addEventListener( InteractiveScene3DEvent.OBJECT_OUT, onOut );
plane1.addEventListener( InteractiveScene3DEvent.OBJECT_PRESS, onPressed );
plane1.addEventListener( InteractiveScene3DEvent.OBJECT_RELEASE, onReleased );

function onOver(e:InteractiveScene3DEvent):void {
	trace("Mouse Over");
}
function onOut(e:InteractiveScene3DEvent):void {
	trace("Mouse Out");
}
function onPressed(e:InteractiveScene3DEvent):void {
	trace("Mouse Down");
}
function onReleased(e:InteractiveScene3DEvent):void {
	trace("Mouse Up");
}

//RENDER LOOP WITH PLANE ROTATION
addEventListener(Event.ENTER_FRAME,render);
function render(e:Event):void {
	plane1.rotationY+=1;
	papervision.singleRender();
}

BasicView – make papervision a little easier

BasicView is such a time and clutter saver when doing a simple papervision scene. Take a look at how much less code this is to setup and get going.

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

//Setup papervision scene with pixel precision camera 1:1 ratio
var papervision:BasicView = new BasicView();
papervision.camera.focus=100
papervision.camera.zoom=10
addChild(papervision);

//Setup material
var colorMat:ColorMaterial = new ColorMaterial(0x0066cc);
colorMat.oneSide=false;

//Setup plane
var plane1:Plane = new Plane(colorMat,300,300,3,3);
papervision.scene.addChild(plane1);

//Render loop with plane rotation
addEventListener(Event.ENTER_FRAME,render);
function render(e:Event):void {
	plane1.rotationY+=1;
	papervision.singleRender();
}

Clearing up text in Papervision – thanks zupko

Take a look here.

Matching pixel dimensions in Papervision

To make a plane of say 300×300 actually display in Papervision as 300×300 set you camera as follows:

var camera:Camera3D = new Camera3D();
camera.focus=100;
camera.zoom=10;
camera.z=-1000;

Plane Scaling and Positioning with Papervision

Great article with some handy functions for plane control in papervision.

Go here to check it out.

Camera and Tweener control in Papervision

Great article on this topic. Check it out here.