Papervision3D: gestire le Bitmap come in FIVe3D
lunedì 5 maggio, 2008Partendo dall'esempio mostrato in FIVe3D: trattare le Bitmap, vediamo come realizzare il medesimo effetto utilizzando Papervision3D 2.0 (Great White), così da proseguire ad analizzare il funzionamento di questa beta Great White.
La prima differenza che possiamo notare risiede nella dimensione del filmato generato: 120K per Papervision contro gli 80 di FIVe3D! Tuttavia è più che comprensibile! Con Papervision stiamo realizzando un rendering 3D vero e proprio! Semplice, in questo esempio, ma espandibile a piacere, a differenza di FIVe3D che, in pratica, termina il suo lavoro lì dove l'abbiamo lasciato. Inoltre, come vedrete dal codice, abbiamo "importato" parti di libreria sicuramente più voluminose rispetto a quelle di FIVe3D:
-
import org.papervision3d.events.InteractiveScene3DEvent;
-
import org.papervision3d.materials.*;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Plane;
-
import org.papervision3d.view.BasicView;
Propongo qui una classe documento PVBitmap, ma voi nominatela come vi pare. Nella libreria del filmato ho importanto un'immagine PNG a 256x256 pixel, esportandola con il solito nome myimage:
-
__mat1 = new BitmapMaterial( new myimage(256, 256), true);
Sorgente, classe documento
-
package {
-
/*
-
** @name : PVBitmap.as
-
** @description : Classe del progetto
-
** @author : =undo=
-
** @web : http://www.undolog.com
-
** @email : g.fazioli@undolog.com
-
**
-
** @ver : 1.0
-
*/
-
import flash.display.*;
-
import flash.events.*;
-
-
/*
-
** Import Papervision3D 2.0
-
*/
-
import org.papervision3d.events.InteractiveScene3DEvent;
-
import org.papervision3d.materials.*;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Plane;
-
import org.papervision3d.view.BasicView;
-
-
// pp3d
-
protected var __bv:BasicView;
-
protected var __mat1:BitmapMaterial;
-
protected var __plane:Plane;
-
/*
-
** Constructor
-
*/
-
function PVBitmap() {
-
}
-
/*
-
** init()
-
*/
-
initPapervision();
-
initMaterials();
-
initObjects();
-
initListeners();
-
}
-
-
/*
-
** initPapervision()
-
*/
-
protected function initPapervision():void {
-
__bv = new BasicView(640, 480, false, true);
-
addChild( __bv );
-
__bv.camera.zoom = 15;
-
}
-
-
/*
-
** initMaterials()
-
*/
-
protected function initMaterials():void {
-
// creo il materiale tramite l'immagine in libreria esportata con il
-
// nome "myimage"
-
__mat1 = new BitmapMaterial( new myimage(256, 256), true);
-
__mat1.smooth = true;
-
__mat1.doubleSided = true;
-
}
-
-
/*
-
** initObjects()
-
*/
-
protected function initObjects():void {
-
__plane = new Plane( __mat1 );
-
__bv.scene.addChild( __plane );
-
}
-
-
/*
-
** initListeners()
-
*/
-
protected function initListeners():void {
-
}
-
-
/*
-
** @prototype
-
*/
-
__plane.yaw(1);
-
__bv.singleRender();
-
}
-
}
-
}
Da notare l'uso dell'oggetto BasicView invece dei classici Viewport3D, Scene3D, Camera3D e BasicRenderEngine. Con un colpo solo, infatti, l'oggeto BasicView istanzia tutti gli altri oggetti necessari al rendering.
A differenza di FIVe3D, poi, Papervision vuole l'eplicita richiesta per creare una texture (o materiale) con la doppia faccia:
-
__mat1.doubleSided = true;
Se impostate doubleSided a false, infatti, durante la rotazione la faccia nascosta non verrà resa.










19

Non ci sono commenti per questo Post
Lascia un commento