Papervision3D: gestire le Bitmap come in FIVe3D

lunedì 5 maggio, 2008

Partendo 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.

Loading Flash Player...


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:

Actionscript:
  1. import org.papervision3d.events.InteractiveScene3DEvent;
  2. import org.papervision3d.materials.*;
  3. import org.papervision3d.objects.DisplayObject3D;
  4. import org.papervision3d.objects.primitives.Plane;
  5. 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:

Actionscript:
  1. __mat1 = new BitmapMaterial( new myimage(256, 256), true);

Sorgente, classe documento

Actionscript:
  1. package {
  2.     /*
  3.     ** @name          : PVBitmap.as
  4.     ** @description   : Classe del progetto
  5.     ** @author        : =undo=
  6.     ** @web           : http://www.undolog.com
  7.     ** @email         : g.fazioli@undolog.com
  8.     **
  9.     ** @ver           : 1.0
  10.     */
  11.     import flash.display.*;
  12.     import flash.events.*;
  13.  
  14.     /*
  15.     ** Import Papervision3D 2.0
  16.     */
  17.     import org.papervision3d.events.InteractiveScene3DEvent;
  18.     import org.papervision3d.materials.*;
  19.     import org.papervision3d.objects.DisplayObject3D;
  20.     import org.papervision3d.objects.primitives.Plane;
  21.     import org.papervision3d.view.BasicView;
  22.  
  23.     public class PVBitmap extends Sprite {
  24.         // pp3d
  25.         protected var __bv:BasicView;
  26.         protected var __mat1:BitmapMaterial;
  27.         protected var __plane:Plane;
  28.         /*
  29.         ** Constructor
  30.         */
  31.         function PVBitmap() {
  32.             addEventListener(Event.ADDED_TO_STAGE, init );
  33.         }
  34.         /*
  35.         ** init()
  36.         */
  37.         protected function init( e:Event ):void {
  38.             initPapervision();
  39.             initMaterials();
  40.             initObjects();
  41.             initListeners();
  42.         }
  43.  
  44.         /*
  45.         ** initPapervision()
  46.         */
  47.         protected function initPapervision():void {
  48.             __bv                = new BasicView(640, 480, false, true);
  49.             addChild( __bv );
  50.             __bv.camera.zoom    = 15;
  51.         }
  52.  
  53.         /*
  54.         ** initMaterials()
  55.         */
  56.         protected function initMaterials():void {
  57.             // creo il materiale tramite l'immagine in libreria esportata con il
  58.             // nome "myimage"
  59.             __mat1             = new BitmapMaterial( new myimage(256, 256), true);
  60.             __mat1.smooth      = true;
  61.             __mat1.doubleSided = true;
  62.         }
  63.  
  64.         /*
  65.         ** initObjects()
  66.         */
  67.         protected function initObjects():void {
  68.             __plane = new Plane( __mat1 );
  69.             __bv.scene.addChild( __plane );
  70.         }
  71.  
  72.         /*
  73.         ** initListeners()
  74.         */
  75.         protected function initListeners():void {
  76.             addEventListener( Event.ENTER_FRAME, render );
  77.         }
  78.  
  79.         /*
  80.         ** @prototype
  81.         */
  82.         private function render(e:Event):void {
  83.             __plane.yaw(1);
  84.             __bv.singleRender();
  85.         }
  86.     }
  87. }

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:

Actionscript:
  1. __mat1.doubleSided = true;

Se impostate doubleSided a false, infatti, durante la rotazione la faccia nascosta non verrà resa.

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL