Pourquoi la largeur et la hauteur sont-elles divisées par 2 dans la matrice de projection en perspective?

9

J'utilise OpenGL pour apprendre l'infographie. J'essaie de comprendre les matrices de projection. Les éléments suivants sont présentés dans le livre rouge d'OpenGL:

entrez la description de l'image ici

entrez la description de l'image ici

Je ne comprends pas pourquoi la largeur et la hauteur sont divisées par 2?

mikeglaz
la source

Réponses:

11

Étant donné que ne varie pas de , il varie de .xproj0widthwidth2width2

Ce qui est important n'est pas la largeur, mais les valeurs minimum et maximum de . Étant donné que trouve au centre de la fenêtre, pas dans le coin, les valeurs min et max sont plus et moins la moitié de la largeur.xproj(0,0)


BTW, le Red Book n'est pas une excellente introduction au graphisme en général. C'est une norme technique, pas un tutoriel, donc l'explication des concepts est juste suffisante pour être sans ambiguïté - elle n'essaie pas d' enseigner le matériel. Il s'agit également d'une bibliothèque de rendu de ligne de balayage en particulier, donc il y a beaucoup de concepts importants qu'elle ne décrit pas du tout, tels que les BRDF sont importants, comment ils se rapportent aux propriétés de surface du monde réel, ce qu'est vraiment une image, et beaucoup techniques de niveau supérieur.

Et enfin, même dans le domaine, il s'agit de savoir - comment utiliser un GPU pour accélérer le rendu - il est horriblement obsolète. L'architecture GL est basée sur des GPU d'il y a 20 ans. Bien que de nombreuses fonctionnalités aient été ajoutées pour suivre les modifications apportées au matériel, les abstractions fondamentales ne sont pas un bon moyen de comprendre les architectures GPU actuelles.

Si vous voulez en savoir plus sur la théorie de l'infographie, commencez par un manuel approprié tel que le rendu physique ou l'infographie: principes et pratiques, ou un cours en ligne. Si vous souhaitez apprendre à créer une application 3D, commencez par un didacticiel sur le type d'application qui vous intéresse (par exemple, s'il s'agit d'un jeu, essayez un didacticiel Unity).

Dan Hulme
la source
Wow, c'est exactement ce que je cherchais. J'ai commencé à lire un manuel d'algèbre linéaire ... mais quel type de mathématiques dois-je savoir pour un rendu basé sur la physique?
mikeglaz
2
Attendez, vouliez-vous dire "Parce que ne varie pas de "? xproj0width
mikeglaz
Pour openGL, il doit se projeter sur les coordonnées normalisées de l'appareil (-1 à 1), de sorte qu'il évolue de -Width / 2 à Width / 2
PaulHK
Vous devriez poser une autre question sur PBR, mais voici une bonne ressource: learnopengl.com/#!PBR/Theory
Alan Wolfe
@mikeglaz je l'ai fait, merci. Je dirais que si vous connaissez l'algèbre linéaire de premier cycle et l'optique du secondaire, ça va. Tous les détails que vous ne comprenez pas déjà, vous aurez déjà les bases pour comprendre en lisant la page Wikipedia appropriée.
Dan Hulme