Bene, è necessario proiettare un mondo 3D su una superficie 2D poiché lo schermo è una superficie 2D.
La grafica 3D funziona in diversi "spazi di coordinate" e questi vengono convertiti per ottenere una scena finale.
Immaginate ad esempio di modellare una città. È possibile definire l'angolo in basso a sinistra della mappa come (0, 0) e in alto a destra come (1000000, 1000000). Si potrebbe anche dire che di regola un punto rappresenterà un piede di spazio reale. Questa rappresentazione chiameremo World Space.
Per disegnare la tua città, ti consigliamo di importare alcuni modelli di edifici e posizionarli nel mondo. Quindi prendi il tuo modello di un edificio, ma quando crei questo modello, non ti devi preoccupare delle dimensioni del mondo o di dove sarà - forse dirai che l'angolo in basso a sinistra dell'edificio è a (0, 0) e in alto a destra è a (1, 1). Questa rappresentazione chiameremo Spazio Modello. Nel mondo però, l'edificio potrebbe essere collocato in (104, 136) e potresti volere che sia 1000x1000 pixel, quindi dovrai tradurlo in (104, 136) e scalarlo di 1000x. Questo lo sta convertendo da Model Space a World Space.
Infine, Camera Space è il modo in cui ti muovi nel mondo. Se ci pensi, muoversi nel mondo potrebbe essere pensato in due modi (almeno): ti muovi per il mondo, o il mondo si muove intorno a te. Quindi, per semplificare il movimento, diremo che la fotocamera è sempre sul punto (0, 0) rivolto verso il basso su un asse. Ora se vuoi andare avanti di 10 pixel, devi semplicemente spostare tutto di 10 pixel. Se vuoi ruotare, ruota invece il mondo. Quindi per rendere l'edificio, prima vogliamo trasformarlo da Model Space in World Space. Ora, per disegnarlo effettivamente, vogliamo sapere dove si trova rispetto allo spettatore, quindi lo spostiamo da World Space a Camera Space.
. . .
Per inciso, se vuoi capirlo bene, un buon esercizio è scrivere un renderer 3D per wireframe, separato da OpenGL. La tua unica funzione di disegno disponibile è DrawLine (x1, y1, x2, y2) che disegna una linea sullo schermo da (x1, y1) a (x2, y2).
Scusate, avrei dovuto chiarirlo: so perché è necessario proiettare un mondo 3d su una superficie 2D. Solo non sapevo perché lo spazio della fotocamera fosse necessario o utile a tal fine. – newprogrammer