Martin Bommeli, 22.01.08

AS3: Papervision3d - erste Versuche

Papervision3D ist eine Open Source 3d Engine auf Flash AS3 Basis. Anfang Dezember ist die alpha Version von Papervision3D 2.0 (Great White) rausgekommen...

Da ich in den letzten Tagen entlich mal AS3 "angeschaut" habe, dachte ich mir es kann ja nicht schaden mal n'bisschen mit Papervision rumzuspielen. Hier also mein erster Versuch :-) Mit Klick auf das Logo dreht es sich in seiner X oder Y Achse. Der Focus wird anhand der X Achse des Cursors berechnet...

bitte Flash Player installieren!

Beim zweiten Beispiel habe ich mal das gleiche Bitmap aus der Libary gezogen und per zufalls x, y und z Achse auf der Stage platziert. Mit Mausbewegung kann man auch einwenig im Raum rumsurfen.

bitte Flash Player installieren!

Download .fla File

Hier ein Codeauszug des zweiten Beispiels:

import org.papervision3d.cameras.*;
import org.papervision3d.core.proto.*;
import org.papervision3d.core.*;
import org.papervision3d.events.*;
import org.papervision3d.scenes.*;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.*;
import org.papervision3d.view.*;
import caurina.transitions.Tweener;
	
var scene:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;
var viewport:Viewport3D;

var p:Plane;
var bam:BitmapAssetMaterial;

initAll();

function initAll(){
	stage.align = StageAlign.TOP_LEFT;
	stage.scaleMode = StageScaleMode.NO_SCALE;
	
	init3D();
	initObject();
}

function init3D(){
	renderer = new BasicRenderEngine();
	
	viewport = new Viewport3D(0, 0, true, true);
	viewport.containerSprite.buttonMode = true;
	addChild(viewport);	
	
	scene = new Scene3D();				
	camera = new Camera3D();
	camera.x = 0;
	camera.y = 0;
	camera.z = -200;
	camera.focus = 100;
	camera.zoom = 1;
}

function initObject(){	
	bam = new BitmapAssetMaterial("cover");
	bam.oneSide = false;
	bam.smooth = true;	
	bam.interactive = true;	
	
	for(var i:uint=0; i<10; i++){
		var p:Plane = new Plane(bam, 800, 166, 2, 2);
		scene.addChild(p);
		p.x = Math.random() * 777 - 222;
		p.y = Math.random() * 777 - 222;
		p.z = Math.random() * 777 - 222;
		p.rotationY = Math.random() * 360;		
		p.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, showAni);	
	}	
	
	stage.addEventListener(MouseEvent.MOUSE_MOVE, initRender);
	stage.addEventListener(Event.MOUSE_LEAVE, renderAllStop);
}

function showAni(ev:InteractiveScene3DEvent) {	
	var newRotXPos:Number = ev.target.rotationX; 
	var newRotYPos:Number = ev.target.rotationY;	
	
	newRotXPos = (newRotXPos+360);
	
	Tweener.pauseAllTweens();
	Tweener.addTween(ev.target,{
					rotationX: newRotXPos,
					rotationY: newRotYPos,
					time: 1.0, 
					transition:"easeOutQuart"
					}
	);
}


function initRender(e:Event):void{
	stage.addEventListener(Event.ENTER_FRAME, renderAll);
}

function renderAllStop(e:Event):void{
	stage.removeEventListener(Event.ENTER_FRAME, renderAll);
}

function renderAll(e:Event):void{
	var newcamX = camera.x+Math.round((stage.mouseX-stage.stageWidth/2)/10);
	var newcamY = camera.y+Math.round((stage.mouseY-stage.stageHeight/2)/10);
	
	if(newcamX>-2000 && newcamX<2000){
		camera.x = newcamX;
	}
	if(newcamY>-200 && newcamY<200){
		camera.y = newcamY;
	}	
	renderer.renderScene(scene, camera, viewport);	
}

- Papervision Source
- Papervision Dokumentation
- Papervision Wiki
- Tweener Source
- Tweener Dokumentation

- AS3 Code-Snippets
- Papervision 360° Video

blog comments powered by Disqus