Esempio: Animazione Bezier

import flash.display.Sprite;
import flash.events.Event;

import org.papervision3d.view.*;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.lights.*;
import caurina.transitions.Tweener;
import caurina.transitions.properties.CurveModifiers;

var viewport:Viewport3D;
var scena:Scene3D;
var camera:Camera3D;
var renderer:BasicRenderEngine;

// inizializzaziamo le special properties di caurina
CurveModifiers.init();

viewport = new Viewport3D(400, 200, true, true);
addChild(viewport);
scena = new Scene3D();
camera = new Camera3D();
camera.y=0;
camera.z=0;
camera.x=450;
renderer = new BasicRenderEngine();

// I MATERIALI
// -----------
var thelight:PointLight3D = new PointLight3D(false);
thelight.z = -300;
thelight.x = 300;

var materiale:FlatShadeMaterial = new FlatShadeMaterial(thelight, 0x999999, 0x000000);
var materialeFreccia:FlatShadeMaterial = new FlatShadeMaterial(thelight, 0x3A6A9A, 0x104070);
materialeFreccia.doubleSided = true;


// I SOLIDI
// --------
var solidoA = new Cube(new MaterialsList({all:materiale}), 50, 50, 300);
var solidoB = new Cube(new MaterialsList({all:materiale}), 50, 50, 300);
var Freccia = new PaperPlane(materialeFreccia,0.7);
var puntoTelecamera = new DisplayObject3D("puntoDiRifxTelecamera");
var puntoAereo = new Sphere(materiale,20);

// LE POSIZIONI INIZIALI
// ---------------------
Freccia.y=0;
puntoAereo.copyPosition(Freccia);
puntoAereo.z= Freccia.z+100;
solidoA.z = 200;
solidoB.z = 600;
puntoTelecamera.z = solidoB.z - solidoA.z;
puntoTelecamera.y = camera.y;
camera.lookAt(puntoTelecamera);

// AGGIUNGIAMO I SOLIDI ALLA SCENA
// -------------------------------
//scena.addChild(puntoAereo);
scena.addChild(solidoA);
scena.addChild(solidoB);
scena.addChild(Freccia);

// L'ANIMAZIONE
// ------------
var andata:Array = new Array();
andata.push({z:200, x:200});
andata.push({z:600, x:-200});

var ritorno:Array = new Array();
ritorno.push({z:600, x:+200});
ritorno.push({z:200, x:-200});

Tweener.addTween(puntoAereo,
				 {z:700, x:0, _bezier:andata,
				  time:5, transition:"linear"});

Tweener.addTween(Freccia,
				 {z:800, x:0,  _bezier:andata, 
				  time:5.5, transition:"linear"});

addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onEnterFrame(e:Event):void
{
  if (puntoAereo.z == 700)
  {
	  Tweener.addTween(puntoAereo,
					   {z:0, x:0, _bezier:ritorno, 
					    time:5, transition:"linear"});
	  
	  Tweener.addTween(Freccia,
					   {z:-100, x:0, _bezier:ritorno, 
					    time:5.5, transition:"linear"});
  }
  
  if (puntoAereo.z==0)
  {
	  Tweener.addTween(puntoAereo, 
					   {z:700, x:0, _bezier:andata, 
					    time:5, transition:"linear"});
	  
	  Tweener.addTween(Freccia, 
					   {z:800, x:0,  _bezier:andata,
					    time:5.5, transition:"linear"});
  }
  Freccia.lookAt(puntoAereo);
  renderer.renderScene(scena, camera, viewport);
}