Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 29 di 51
  • livello principiante
Indice lezioni

Skin sulle facce del cubo

Nella lezione precedente abbiamo visto come applicare la stessa texture a tutte le facce del cubo. In questa lezione vediamo come applicare immagini diverse su ogni faccia
Nella lezione precedente abbiamo visto come applicare la stessa texture a tutte le facce del cubo. In questa lezione vediamo come applicare immagini diverse su ogni faccia
Link copiato negli appunti

Non tutte le facce devono avere la stessa skin, ogni faccia può avere una skin differente.

Nel caso si vogliano utilizzare più skin, dovremo utilizzare il comando getFaces(), che restituisce un array contenente i riferimenti a tutte le facce dell'oggetto.

Vediamo cosa succede se settiamo più di una skin su un cubo. Per prima cosa dobbiamo conoscere il numero di facce texturizzabili, valore che possiamo ottenere contando gli elementi dell'array restituito da getFaces.

var faces = box.getFaces();
trace(faces.length);

Come previsto il risultato è 12 (ricordiamo, due per ognuno dei sei lati del cubo). Ora sulla prima faccia mettiamo una skin diversa da "monalisafit":

faces[0].setSkin("skin2");
// "skin2" corrisponde alla skin "petit" usata in precedenza.

Cubo con applicate due texture

Ruotando il cubo possiamo notare come la nuova texture copra solo "metà" faccia del cubo.

Può sembrare un comportamento errato, ma in realtà è correttissimo: ricordiamo infatti che ogni faccia è composta da due triangoli, mentre con il comando precedente abbiamo impostato la texture solo su uno! Per coprire l'intera faccia dobbiamo utilizzare:

// "skin2" corrisponde alla skin "petit" usata in precedenza.
faces[0].setSkin("skin2");
faces[1].setSkin("skin2");

Che da il seguente risultato

Cubo con applicate due texture e coperta l'intera faccia

Come vediamo in questo modo copriamo entrambi i rettangoli.

Come abbiamo già visto nell'esempio del piano, ogni faccia può avere una skin frontale e una sul retro: ad esempio per poter vedere "dentro" al cubo le texture, possiamo utilizzare il seguente codice:

Listato 33. Setta le skin solo di alcune facce

var faces = box.getFaces();
faces[0].setSkin(skin); faces[0].setBackSkin(skin);
faces[1].setSkin(skin); faces[1].setBackSkin(skin);
faces[2].setSkin(skin); faces[2].setBackSkin(skin);
faces[3].setSkin(skin); faces[3].setBackSkin(skin);
faces[4].setSkin(skin2);faces[4].setBackSkin(skin2);
faces[5].setSkin(skin2);faces[5].setBackSkin(skin2);
faces[8].setSkin(skin); faces[8].setBackSkin(skin);
faces[9].setSkin(skin); faces[9].setBackSkin(skin);

Con questo codice andiamo a rempire alcune facce, sia davanti che dietro, mentre ne lasciamo alcune con la texture predefinita (notiamo infatti che per le facce 6, 7 e da 10 a 12 non sia impostata nessuna skin). Ecco il risultato

Cubo con applicate due texture più quella di default

Disabilitando il backface culling possiamo far sì che le parti "nascoste" dentro al cubo vengano texturizzate e quindi visualizzarle. Tale effetto si nota meglio utilizzando la modalità "quad", poichè non ci troviamo con delle righe in mezzo alle facce "nascoste".

Cubo con applicate due texture più quella di default e metodo "quad"

Ricordiamo però che questo metodo è sconsigliato, soprattutto per la distorsione che causa alle immagini quando l'oggetto viene mosso (come possiamo vedere nell'esempio). Il problema è meno accentuato su corpi rettilinei come il cubo, consigliamo comunque di utilizzare la modalità "tri". Ricordiamo anche che in modalità "quad" il numero di facce è dimezzato rispetto alla modalità "tri", pertanto nel codice di esempio sono state commentate alcune righe.

"© Petit Publications 2006" - diritti riservati


Ti consigliamo anche