A+ A A-

Papervision3D - Il Piano In evidenza

 

logoPV3DL'oggetto piano è di gran lunga la forma più semplice tra le primitive. In realtà è un rettangolo, e finché non lo ruotare su uno degli assi x o y, sembra un'oggetto 2D. E 'abbastanza facile aggiungere un piano. Tutto quello che dovete fare è importare la classe giusta, creare un'istanza, e aggiungerlo alla scena.
In precedenza, abbiamo già creato un progetto chiamato PlaneExample. La seguente classe appare esattamente come la classe del documento PlaneExample che avete già creato con qualche riga di codice aggiuntivo. Le linee extra sono evidenziate.

package {
   
    import flash.events.Event;
    import org.papervision3d.view.BasicView;
    import org.papervision3d.objects.primitives.Plane;
   
   
    public class PlaneExample extends BasicView
    {
       
        private var plane:Plane;
        public function PlaneExample()
        {
           stage.frameRate = 40;     
    
           init();
           startRendering();
         }

       private function init():void       
        {
           plane = new Plane(null,300,300,1,1);
           scene.addChild(plane);
         }
   
        override protected function onRenderTick (e:Event=null):void
        {   
            super.onRenderTick();
        }
    }
}

Per poter utilizzare la classe Plane, con le sue proprietà e metodi, abbiamo prima dovuto importarla. Tutte le classi primitive si trovano in org.papervision3d.objects.primitives. Poi abbiampianoo assegnato al nostro oggetto piano una variabile d'istanza chiamata plane. Abbiamo usato una proprietà di classe, e non una variabile locale, per essere sicuri di avere accesso al piano al di fuori del costruttore. questo consente di accedere al piano da altri metodi come il metodo di rendering. Poi, abbiamo creato il nostro piano passando alcuni argomenti al costruttore Plane e l'abbiamo aggiunto alla scena utilizzando il metodo addChild (). Se si pubblica questo esempio, si dovrebbe vedere un semplice piano composto da due triangoli.

Abbiamo passato cinque argomenti al costruttore Plane. Vediamo quali sono:

Parameter  Data type Default value  Description 
1 material MaterialObject3D null Definisce il materiale da applicare al piano
2 width Number 0 Imposta la larghezza del piano
3 height Number 0 Imposta l'altezza del piano
4 segmentsW Number 0 Imposta il numero di segmenti orizzontali
5 segmentsH Number 0 Imposta il numero di segmenti vericali

Nell'esempio abbiamo passato null come un materiale, che si traduce nell'applicazione del materiale di default WireframeMaterial. I parametri 4 e 5 definiscono il numero di segmenti.
Date un'occhiata al seguente figura per vedere come funzionano i segmenti:TrePiani

Il piano a sinistra ha la larghezza e l'altezza di un segmento ed è formato da solo 2 triangoli. Il piano al centro ha la larghezza di due segmenti. Come potete vedere, ad ogni segmento di larghezza o altezza che si ottiiene  l'aggiunta di due triangoli più.
Quando si proietta un'immagine su un piano, un problema comune è che il l'immagine si distorce quando si ruota il piano. È possibile evitare questo aumentando il numero di segmenti. Allo stesso tempo, si dovrebbe fare attenzione a non aggiungere troppi segmenti. I segmenti più aumentano, più potenza di elaborazione è necessaria per renderizzare tutti i triangoli. L'aggiunta di troppi triangoli può far si che un oggetto risulti difficile da gestire dal Flash player. In generale dovreste cercare di mantenere il numero totale di triangoli in una scena sotto i 3000.
Sebbene il valore predefinito per entrambi i parametri del segmento sia 0, passando 0 o nessun valore si produrrà un piano con una larghezza e l'altezza di un segmento.

Ora che abbiamo visto quali argomenti si possono passare al costruttore Plane, diamo uno sguardo ad alcune delle proprietà che è possibile impostare una volta che si è creato un piano. Tutte le primitive indirettamente estendono la classe DisplayObject3D. In altre parole, le primitive ereditano tutte le proprietà e i metodi di DisplayObject3D tranne quando sono private.
Giochiamo con alcune delle proprietà ereditate per posizionare il piano nella nostra classe PlaneExample, e impostare le x, y, z nel metodo init ():

private function init():void
{
     plane = new Plane(null,300,300,1,1);
     scene.addChild(plane);
     plane.x = 200;
     plane.y = 200;
     plane.z = 300;
}

Nel secondo capitolo, abbiamo discusso della differenza tra i sistemi di coordinate in Papervision3D e Flash. In Papervision3D, aumentando la coordinata y si sposta il piano verso l'alto e aumentando z si allontana da noi. Aumentare la x farà lo stesso che in Flash muovendo il piano verso destra.
Allo stesso modo dei filmati Flash, ogni primitiva ha un punto di origine. Nei clip filmato il punto di origine è impostato per default al (0,0).
In oggetti 3D questo punto è fissato a (0,0,0), che si trova al centro o nell'origine dell'oggetto. Mentre nei clip filmato si può cambiare il punto di origine, non si può semplicemente cambiare l'origine di un Oggetto Papervision3D.
Nel metodo che renderizza la nostra scena, si aggiunge un'altra proprietà, localRotationY, e viene incrementato il suo valore ogni fotogramma di 1.

override protected function onRenderTick(e:Event=null):void
{   
     plane.localRotationY++;
     super.onRenderTick();
}

Questo farà sì che il piano ruoti attorno al proprio asse y. Come potete vedere alcune delle proprietà sono simili alle proprietà del Classe ActionScript DisplayObject, come x e y. Ma DisplayObject3D di Papervision3D ha un insieme di proprietà extra (e metodi) che consentono ale sue istanze di spostare e ruotare nello Spazio 3D come z e localRotationY.
Ci sono diversi modi di ruotare gli oggetti in Papervision3D. il localRotationX, localRotationY e localRotationZ è una proprietà che imposta la rotazione dell'oggetto intorno al suo proprio asse x, y, e z rispettivamente.
Il valore è impostato in gradiplane.localRotationY = 45 imposta la rotazione dell'aereo attorno all'asse y di 45 gradi.
Se si pubblica il progetto questo dovrebbe mostrare un piano rotante. Tuttavia, solo uno lato del piano ha un materiale wireframe applicata ad esso. Questo è il materiale di default quando non si applica uno specifico materiale ad una primitiva di Papervision3D o quando si passa null come argomento materiale. Un modo di visualizzare materiale su due lati si ottine accedendo alla proprietà materiale del piano, che a sua volta ha una proprietà doubleSided che abbiamo impostato su true.

plane.material.doubleSided = true;

L'aggiunta di questa riga di codice al metodo init () dopo aver creato il piano fa in modo che questo abbia un materiale applicato su entrambi i lati.

Uno sguardo più da vicino a DisplayObject3D
La documentazione Papervision3D descrive DisplayObject3D come segue:
La classe DisplayObject3D rappresenta le istanze degli oggetti 3D che sono contenute nella scena.
Sembrerebbe una classe molto importante visto che una scena 3D non avrebbe più significato senza oggetti 3D.
Si potrebbe dire che la rilevanza di DisplayObject3D strida col fatto che così tante sottoclassi lo estendano. Non solo le primitive ereditano da DisplayObject3D, ma anche la classe Camera e la classe DAE per esempio (una classe che può essere utilizzata per caricare modelli esterni in Papervision3D. DisplayObject3D ha una serie di proprietà fondamentali e metodi che possono essere utilizzati da oggetti 3D).

 

 

Ultima modifica ilLunedì, 25 Giugno 2012 21:14
Vota questo articolo
(0 Voti)
Torna in alto