C'è una certa confusione qui.
OpenGL è destrorso nello spazio degli oggetti e nello spazio del mondo.
Ma nello spazio finestra (noto anche come spazio schermo) siamo improvvisamente mancini .
Come è successo ?
Il modo in cui si passa da destrimani a mancini è una voce di ridimensionamento z negativa nelle matrici di proiezione glOrtho
o glFrustum
. Scalare z di -1 (lasciando xey come erano) ha l'effetto di modificare la manualità del sistema di coordinate.
Per glFrustum,
lontano e vicino dovrebbero essere positivi, con lontano > vicino . Dire lontano = 1000 e vicino = 1. Quindi C = - (1001) / (999) = -1,002.
Vedi qui per maggiori dettagli e diagrammi.
Da un prospettiva ortografica , glOrtho genera una matrice come questa:
Qui, sinistra , destra , in basso e in alto sono solo le coordinate per verticale sinistra , verticale destra , orizzontale inferiore piani di ritaglio , orizzontale superiore (risp . ) .
I piani vicini e lontani , tuttavia, sono specificati in modo diverso . Il parametro near è definito come
- Vicino al distanza dal piano di ritaglio della profondità più vicino. Questa distanza è negativa se l'aereo deve essere dietro lo spettatore.
e lontano:
- zFar La distanza dal piano di ritaglio della profondità più lontano. Questa distanza è negativa se l'aereo deve essere dietro lo spettatore.
Qui abbiamo un tipico volume di visualizzazione canonica
Poiché il moltiplicatore z è (-2 / (molto vicino)), il segno meno ridimensiona effettivamente z di -1 . Ciò significa che "z" è ruotata verso sinistra durante la trasformazione della visualizzazione, all'insaputa della maggior parte delle persone poiché lavorano semplicemente in OpenGL come un sistema di coordinate "destrorso".
Quindi, se chiami
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Quindi il NEAR PLANE è 10 unità davanti a te . Dove sei? Perché, all'origine, con l'asse x alla tua destra, l'asse y sopra la testa e il naso rivolto verso il basso l'asse z negativo (questa è l'impostazione predefinita "Per impostazione predefinita, la fotocamera si trova all'origine , punta verso il basso l'asse z negativo e ha un vettore su (0, 1, 0). " ). Quindi il piano vicino è a z = -10. Il piano lontano è di 10 unità dietro di te, in z = + 10 .