Il y a une certaine confusion ici.
OpenGL est droitier dans l'espace objet et l'espace mondial.
Mais dans l'espace fenêtre (aka espace écran), nous sommes soudainement gauchers .
Comment est-ce arrivé ?
La façon dont nous passons de droitier à gaucher est une entrée de mise à l'échelle z négative dans les matrices de projection glOrtho
ou glFrustum
. La mise à l'échelle de z par -1 (tout en laissant x et y tels quels) a pour effet de modifier la sensibilité du système de coordonnées.
Pour glFrustum,
loin et proche sont supposés être positifs, avec loin > proche . Dites loin = 1000 et près = 1. Alors C = - (1001) / (999) = -1,002.
Voir ici pour plus de détails et de diagrammes.
D'un point de vue orthographique , glOrtho génère une matrice comme celle-ci:
Ici, à gauche , à droite , en bas et en haut sont seulement les coordonnées de gauche verticale , droite verticale , horizontale inférieure , supérieurs horizontaux plans de délimitation (resp) .
Les plans proche et éloigné , cependant, sont spécifiés différemment . Le paramètre proche est défini comme
- Near: La distance par rapport au plan de détourage de profondeur le plus proche. Cette distance est négative si l'avion doit être derrière le spectateur.
et loin:
- zFar La distance par rapport au plan de détourage de profondeur le plus éloigné. Cette distance est négative si l'avion doit être derrière le spectateur.
Ici, nous avons un volume de vue canonique typique
Comme le multiplicateur z est (-2 / (très proche)), le signe moins met effectivement à l'échelle z par -1 . Cela signifie que "z" est tourné à gauche pendant la transformation de visualisation, à l'insu de la plupart des gens car ils travaillent simplement dans OpenGL comme un système de coordonnées "droitier".
Donc, si vous appelez
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Alors le PRÈS DE L'AVION a 10 unités devant vous . Où es-tu? Pourquoi, à l'origine, avec l'axe x à votre droite, l'axe y au-dessus de votre tête et votre nez pointant vers le bas l'axe z négatif (c'est la valeur par défaut "Par défaut, la caméra est située à l'origine , pointe vers le bas l'axe z négatif et a un vecteur ascendant de (0, 1, 0). " ). Le plan proche est donc à z = -10. Le plan lointain est à 10 unités derrière vous, à z = + 10 .