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