Coordinate Omogenee:
Per rappresentare punti nello spazio proiettivo usiamo le coordinate omogenee. Questo ci permette di rappresentare traslazioni, rotazioni e proiezioni prospettiche tramite moltiplicazioni di matrici.
Matrici di Trasformazione 3D (4x4):
Le trasformazioni (traslazione, rotazione, scaling) sono rappresentate da matrici 4x4 che operano su coordinate omogenee.
Forma Generale:
Rotazione attorno agli assi di un angolo alfa:
Il modello di camera descrive matematicamente il processo di proiezione di punti 3D dalla scena al piano immagine 2D. Si compone di due parti principali: parametri intrinseci ed estrinseci.
Sistemi di Coordinate:
Parametri Estrinseci: Definiscono la *posizione* e l'*orientamento* della camera rispetto al sistema di coordinate del mondo.
Trasformazione da Coordinate del Mondo a Coordinate della Camera:
Dove Pw = [Xw, Yw, Zw]T è un punto in coordinate del mondo, e Pc = [Xc, Yc, Zc]T è lo stesso punto in coordinate della camera.
Rappresentazione in Coordinate Omogenee:
Possiamo combinare rotazione e traslazione in un'unica matrice 4x4 (matrice di trasformazione *estrinseca*):
Parametri Intrinseci: Definiscono le caratteristiche *interne* della camera, come la lunghezza focale e la posizione del punto principale.
Matrice dei Parametri Intrinseci (K):
Matrice di Proiezione Completa (P):
Combina parametri intrinseci ed estrinseci in un'unica matrice 3x4 (o 4x4 in forma omogenea):
Equazione di Proiezione:
Dove pi = (u', v', w') sono le coordinate omogenee dell'immagine, e le coordinate pixel finali sono u = u'/w' e v = v'/w'. Questa divisione per w' è fondamentale per l'effetto prospettico.
Il modello di camera pinhole (foro stenopeico) è una semplificazione del modello generale, ed è il modello *fondamentale* utilizzato in computer grafica (e implementato da `THREE.PerspectiveCamera`).
Assunzioni:
Questo modello, pur essendo un'idealizzazione, è una buona approssimazione per molte camere reali, *specialmente* quando la profondità di campo è ampia e la distorsione della lente è minima.
Semplificazioni:
Nel modello pinhole, la matrice dei parametri intrinseci K si semplifica:
Dove f = fx = fy è una singola lunghezza focale (in pixel). Questo perché, nel modello pinhole ideale, non c'è distorsione e gli assi u e v del piano immagine sono ortogonali e hanno la stessa scala.
Matrice di Proiezione Pinhole (con camera allineata agli assi):
Se la camera è allineata con gli assi del mondo (R = matrice identità) e traslata di un vettore t, la matrice di proiezione P si semplifica a:
Spesso, per ulteriore semplicità, si assume che la camera sia all'origine (t = [0, 0, 0]). In questo caso, la matrice diventa:
La proiezione ortografica è un tipo di proiezione *parallela*. Non c'è un centro di proiezione singolo; tutti i raggi di proiezione sono paralleli tra loro e perpendicolari al piano immagine. Questo significa che le dimensioni degli oggetti *non* cambiano con la distanza dalla camera.
Matrice di Proiezione Ortografica:
Dove left, right, top, bottom, near e far definiscono i limiti del *volume di visualizzazione ortografico* (un parallelepipedo rettangolo). Tutto ciò che si trova al di fuori di questo volume viene scartato (clipping).
Proiezione:
Three.js utilizza internamente questi concetti:
THREE.PerspectiveCamera: Implementa il modello di camera pinhole. I parametri fov, aspect, near e far definiscono la matrice di proiezione prospettica.THREE.OrthographicCamera: Implementa la proiezione ortografica. I parametri left, right, top, bottom, near e far definiscono il volume di visualizzazione.camera.position, camera.rotation: Controllano i parametri estrinseci (posizione e orientamento della camera). Three.js utilizza internamente matrici 4x4 per rappresentare queste trasformazioni.Object3D.position, Object3D.rotation, Object3D.scale: Permettono di applicare trasformazioni (traslazione, rotazione, scaling) agli oggetti 3D. Three.js gestisce internamente la moltiplicazione delle matrici.