<strong>3D</strong> <strong>GRAPHICS</strong> 13 float position_x, position_y, position_z; //traslazione float rotation_x, rotation_y, rotation_z; //rotazione float scale_x, scale_y, scale_z; //scala Ovvero una variabile numerica ( float ) per ogni valore che andrà a comporre la nostra trasformazione, per un totale di nove variabili. Pur rimanendo un metodo valido nella sua semplicità, come vedremo esistono sistemi di rappresentazioni più adatti al nostro scopo: Infatti a livello di design del codice questo sistema è tutt’altro che modulare. Inoltre, se ad esempio vogliamo traslare un elemento di 2 unità verso destra, 3 unità verso l’alto e 1 unità in avanti, e ruotarlo di 20° sull’asse X, di 30° sull’asse Y e di 5° sull’asse Z, saremo costretti a scrivere un codice di questo tipo: position_x+=2; position_y+=3; position_z+=1; rotation_x+=20; rotation_y+=30; rotation_z+=5; Che non solo è verboso ( per ovviare a questo problema basterebbe, in realtà, racchiudere il tutto sotto una funzione ) ma è propenso agli errori, specialmente perché l’ordine con il quale andiamo ad effettuare queste traslazioni e rotazioni ( e più in generale qualsiasi trasformazione ) è FONDAMENTALE: Cambiando l'ordine, infatti, può cambiare il risultato finale. Se, dato un punto in posizione [x,y,z] nel nostro ambiente <strong>3D</strong>, effettuiamo prima una certa traslazione “T” e poi una certa rotazione “R” otterremo il punto in una nuova posizione [x1,y1,z1]. Se, invece, partendo dal medesimo punto iniziale [x,y,z], effettuiamo prima la rotazione “R” e poi la traslazione “T”, non otterremo il punto in posizione [x1,y1,z1] ma bensì in un’altra posizione [x2,y2,z2]. ( Figura 2.3 )
2 - Trasformazioni | 2.2 - Rappresentare le trasformazioni 14 Figura 2.3 - Ordine di esecuzione delle trasformazioni.