Nella maggior parte dei grafici 3D un punto è rappresentato da un vettore a 4 componenti (x, y, z, w), dove w = 1. Le operazioni usuali applicate su un punto includono traslazione, ridimensionamento, rotazione, riflessione combinazione di questi.
Queste trasformazioni possono essere rappresentate da un oggetto matematico chiamato "matrice". Una matrice applica su un vettore come questo:
[ a b c tx ] [ x ] [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z | | g*x + h*y + i*z + tz*w |
[ p q r s ] [ w ] [ p*x + q*y + r*z + s*w ]
Ad esempio, il ridimensionamento è rappresentato come
[ 2 . . . ] [ x ] [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z | | 2z |
[ . . . 1 ] [ 1 ] [ 1 ]
e di traduzione
[ 1 . . dx ] [ x ] [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z | | z + dz |
[ . . . 1 ] [ 1 ] [ 1 ]
Uno dei motivi per il 4 ° componente è quello di rendere una traduzione rappresentabile da una matrice.
Il vantaggio dell'utilizzo di una matrice è che più trasformazioni possono essere combinate in una tramite moltiplicazione di matrice.
Ora, se lo scopo è semplicemente quello di portare la traduzione sul tavolo, allora direi (x, y, z, 1) invece di (x, y, z, w) e fare l'ultima riga del matrice sempre [0 0 0 1]
, come fatto di solito per la grafica 2D. Infatti, il vettore 4-componente verrà mappato nuovo al vettore normale 3-vector attraverso questa formula:
[ x(3D) ] [ x/w ]
| y(3D) ] = | y/w |
[ z(3D) ] [ z/w ]
Questo è chiamato homogeneous coordinates. Ciò consente di rendere la proiezione prospettica anche con una matrice, che può nuovamente combinarsi con tutte le altre trasformazioni.
Ad esempio, poiché gli oggetti più lontani devono essere più piccoli sullo schermo, trasformiamo coordinate 3D in 2D utilizzando formula
x(2D) = x(3D)/(10 * z(3D))
y(2D) = y(3D)/(10 * z(3D))
Ora se applichiamo la matrice di proiezione
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
allora il vero Le coordinate 3D diventerebbero
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
quindi abbiamo solo bisogno di tritare la z -coordinate per proiettare in 2D.
Controlla il libro "Matematica essenziale per giochi e applicazioni interattive". –
Un vettore normalizzato non è "nessuna grandezza". I vettori normalizzati hanno una lunghezza/magnitudine di 1. – alesplin
Grazie! Immagino di essere stato portato alla comprensione. Almeno ero sulla strada giusta. ;) –