Papervision3D: gestire le Bitmap come in FIVe3D

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:

1
2
3
4
5
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 256×256 pixel, esportandola con il solito nome myimage:

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

Sorgente, classe documento

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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;

    public class PVBitmap extends Sprite {
        // pp3d
        protected var __bv:BasicView;
        protected var __mat1:BitmapMaterial;
        protected var __plane:Plane;
        /*
        ** Constructor
        */

        function PVBitmap() {
            addEventListener(Event.ADDED_TO_STAGE, init );
        }
        /*
        ** init()
        */

        protected function init( e:Event ):void {
            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 {
            addEventListener( Event.ENTER_FRAME, render );
        }

        /*
        ** @prototype
        */

        private function render(e:Event):void {
            __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:

1
__mat1.doubleSided = true;

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

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
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA