A+ A A-

Papervision3D - Il cubo In evidenza

logoPV3D

Nei paragrafi precedenti abbiamo istanziato un piano, una sfera, un cilindro e un cono. In tutti e quattro gli esempi abbiamo passato null come materiale, con conseguente primitive che avevano il materiale wireframe predefinito applicato.
Anche se un'istanza di un cubo è abbastanza simile a quelle delle primitive discusse in precedenza, l'applicazione dei materiali è diverso da quello che abbiamo visto finora. Il primo parametro del costruttore Cube non è un materiale, ma una lista dei materiali.
Siccome un cubo ha sei lati, con l'aggiunta della lista, ci consente di applicare un materiale diverso per ogni lato.
Per creare un elenco di materiali è necessario importare la classe MaterialsList. Dobbiamo anche importare la classe Cube, per questa volta useremo un colore come nostro materiale, così abbiamo bisogno di importare ColorMaterial.

import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Cube;
 

Aggiungere questa linea per creare una proprietà di classe:

private var cube:Cube;

Nel metodo init (), per prima cosa creare tre materiali colore passando un valore esadecimale di colore  al costruttore ColorMaterial:

private function init():void
{
var red:ColorMaterial = new ColorMaterial(0xFF0000);
var blue:ColorMaterial = new ColorMaterial(0x0000FF);
var green:ColorMaterial = new ColorMaterial(0x00FF00);
 

Poi inseriamo un'istanza di un elenco di materiali.

var materialsList:MaterialsList = new MaterialsList();

Ora possiamo aggiungere i materiali per l'elenco, utilizzando il metodo addMaterial (). noi andremo ad applicare ogni materiale di colore a due facce opposte del cubo.

materialsList.addMaterial(red,"front");
materialsList.addMaterial(red,"back");
materialsList.addMaterial(blue,"left");
materialsList.addMaterial(blue,"right");
materialsList.addMaterial(green,"top");
materialsList.addMaterial(green,"bottom");

Si noti che un secondo argomento viene passato in questo metodo, cioè "front" e "back". Questo argomento è una stringa e rappresenta la faccia del cubo. In precedenza abbiamo usato il termine faccia come un altro significato per indicare triangoli. Tuttavia, quando si parla delle facce di un cubo, ci si riferisce ai sei lati, non ai rispettivi triangoli che le formano.
Se si desidera applicare lo stesso materiale a tutte e sei le facce, si può passare la stringa "all" al metodo addMaterial () :

materialsList.addMaterial (green, "all");

Infine creiamo il cubo, passando la lista dei materiali e altri tre argomenti, e lo aggiungere alla scena.

  cube = new Cube(materialsList,300,300,300);
  scene.addChild(cube);
}

Il cubo prevede soltanto pochi parametri, quindi cerchiamo di riassumerli:

 

Parameter  Data type Default value  Description 
1 material MaterialList   Una lista che contiene i materiali di ogni faccia 
2 width Number 500 Imposta la larghezza
3 depth Number 500 Imposta la profondità
4 height Number 500 Imposta l'altezza 
5 segmentsS int 1 imposta il numero dei segmentil di larghezza
6 segmentsT int 1 imposta il numero di segmenti di altezza
7 segmentsH int 1 Imposta il numero di segmenti in profondità
8 insideFaces int 0 Definisce le facce visibili all'interno del cubo
9 excludeFaces int 0 Definisce le facce che non devono essere create perchè coperte alla vista

Gli argomenti quinto, sesto e settimo definiscono il numero di segmenti, e meritano
uno sguardo più attento. I tre cubi nella figura seguente mostra come ogni parametro
ha suddiviso i lati con un segmento in lati con due segmenti:
cubi
Quando i cubi di cui sopra sono stati istanziati, ai parametri quinto, sesto e settimo sono stati
dati i seguenti valori:

• Il cubo a sinistra: 2, 1, e 1, creando  due segmenti in larghezza sull'asse x
• Il cubo al centro: 1, 2 e 1, creando  due segmenti in larghezza sull'asse  y
• Il cubo a destra: 1, 1 e 2, creando  due segmenti in larghezza sull'asse  z

Prendiamoci un momento per esaminare il parametri ottavo e la nono, che non abbiamo usato nostro esempio.
Il parametro insideFaces definisce i lati che sono visibili dall'interno del cubo. Supponiamo che la fotocamera sia collocata all'interno del cubo e si desidera usarla solo per mostrare il retro del cubo. Per raggiungere questo obiettivo si passerebbe Cube.BACK come argomento. È inoltre possibile aggiungere o sottrarre faccie quando si passa l'argomento, per esempio Cube.ALL-Cube.LEFT per mostrare tutti i lati, tranne il lato sinistro.
Il parametro excludeFaces definisce i lati che non verranno creati. Anche qui si possono aggiungere o sottrarre. Passando Cube.FRONT + Cube.BACK risulterà in un cubo senza la faccia frontale e la posteriore.
Da notare che nella lista dei parametri il valore di default di entrambi insideFaces e excludeFaces è 0, che è l'equivalente di Cube.NONE.
Siccome abbiamo creato una proprietà di classe per il nostro cubo, siamo in grado di accedervi nel metodo rendering. Facciamo ruotare il cubo attorno ai suoi tre assi, in modo che possiamo vedere tutti i lati:

override protected function onRenderTick(e:Event=null):void
{       
     cube.localRotationX++;
     cube.localRotationY++;       
     cube.localRotationZ++;           
     super.onRenderTick();
}
Ultima modifica ilLunedì, 25 Giugno 2012 21:12
Vota questo articolo
(0 Voti)
Torna in alto