Le but de la matrice de projection Model View


102

À quelles fins utilisons-nous la matrice de projection Model View? Pourquoi les shaders nécessitent-ils une matrice de projection Model View?


12
Consultez simplement ce lien: songho.ca/opengl/gl_transform.html
iKushal

3
J'ai suggéré d'ouvrir un site Stack Exchange dédié à l'infographie, et j'ai choisi cette question comme exemple de question . Suivez computergraphics.stackexchange.com si vous souhaitez voir le site en cours de lancement!
essuyez

Réponses:


196

Les matrices de modèle, de vue et de projection sont trois matrices distinctes. Modélisez les cartes de l'espace de coordonnées locales d'un objet dans l'espace du monde, vue de l'espace du monde vers l'espace de la caméra, projection de la caméra à l'écran.

Si vous composez les trois, vous pouvez utiliser le seul résultat pour mapper tout le chemin de l'espace objet à l'espace écran, ce qui vous permet de déterminer ce dont vous avez besoin pour passer à l'étape suivante d'un pipeline programmable à partir des positions de sommet entrantes.

Dans les anciens pipelines de fonctionnalités fixes, vous appliquiez le modèle et la vue ensemble, puis travailliez l'éclairage en utilisant un autre résultat dérivé d'eux (avec quelques corrections de sorte que, par exemple, les normales soient toujours une longueur unitaire, même si vous avez appliqué une certaine mise à l'échelle à l'objet. ), puis appliquez la projection. Vous pouvez voir cela reflété dans OpenGL, qui ne sépare jamais le modèle et les matrices de vue - en les conservant comme une seule pile de matrices de vue de modèle. Vous voyez donc aussi parfois cela reflété dans les shaders.

Donc: la matrice de projection de vue de modèle composée est souvent utilisée par les shaders pour mapper les sommets que vous avez chargés pour chaque modèle à l'écran. Ce n'est pas obligatoire, il existe de nombreuses façons de réaliser la même chose, c'est juste habituel car cela permet toutes les transformations linéaires possibles. Pour cette raison, une version moins composée de celui-ci était également la norme dans l'ancien monde des pipelines fixes.


3
donc pour plusieurs objets (maillages) nous avons besoin de plusieurs matrices modelView, n'est-ce pas?
Yuriy Vikulov le

5
En supposant qu'ils peuvent se déplacer indépendamment ou avoir été positionnés séparément, alors oui. C'est donc de loin la manière la plus courante de procéder: transmettre modelView ou projectionModelView comme uniforme au programme shader, après l'avoir configuré pour le modèle actuel sur le processeur.
Tommy

Salut Tommy, pouvez-vous suggérer un exemple de code pour la fonctionnalité de panoramique dans Opengl Es2.0 sous Android en utilisant cette matrice de projection Model View si possible. J'ai référencé plus de liens, je n'ai pas pu avoir d'idée claire. Si un exemple de code signifie, c'est facile à comprendre pour moi ..
harikrishnan

1
J'ai une question. Si openGL utilise la matrice MV comme une seule et si nous allions de l'espace caméra à l'espace monde, nous aurions besoin d'inverser (matrice de projection * matrice de vue) * (position du curseur) mais si la vue du modèle est une matrice composée. comment séparer le modèle et la matrice de vue afin que je puisse utiliser la matrice de vue pour ce calcul. Alors j'ai besoin de les garder séparés?
Evren Bingøl

@ EvrenBingøl Avez-vous déjà obtenu votre réponse? J'ai gardé mon modèle et mes matrices de vue séparés, mais j'aimerais connaître la réponse réelle à votre question si je dois continuer à les séparer ou non.
tom_mai78101

9

Parce que les matrices sont pratiques. Les matrices aident à convertir les emplacements / directions par rapport à différents espaces (un espace peut être défini par 3 axes perpendiculaires et une origine).

Voici un exemple d'un livre spécifié par @ legends2k dans les commentaires.

Les habitants de Cartesia utilisent une carte de leur ville avec l'origine centrée assez sensiblement au centre de la ville et les axes dirigés le long des points cardinaux de la boussole. Les habitants de Dyslexia utilisent une carte de leur ville avec les coordonnées centrées en un point arbitraire et les axes fonctionnant dans des directions arbitraires qui semblaient probablement une bonne idée à l'époque. Les citoyens des deux villes sont assez satisfaits de leurs cartes respectives, mais l'ingénieur des transports de l'État chargé de gérer un budget pour la première autoroute entre Cartesia et Dyslexia a besoin d'une carte montrant les détails des deux villes, qui introduit donc une troisième coordonnée système qui lui est supérieur, mais pas nécessairement à quiconque.

Voici un autre exemple,

Supposons que vous ayez créé un objet voiture dans un jeu avec ses positions de sommet en utilisant les coordonnées du monde. Supposons que vous deviez utiliser cette même voiture dans un autre jeu dans un monde entièrement différent, vous devez redéfinir les positions et les calculs deviendront complexes. C'est parce que vous devez à nouveau calculer les positions de la fenêtre, du capot, des phares, des roues, etc., dans la voiture par rapport au nouveau monde.

Regardez cette vidéo pour comprendre les concepts de modèle, de vue et de projection. (hautement recommandé)

Ensuite, voyez ceci pour comprendre comment les sommets du monde sont représentés sous forme de matrices et comment ils sont transformés.


Si vous y réfléchissez profondément, vous vous rendrez compte que même si la transformation est basée sur l'origine d'un objet (c'est-à-dire un point unique), tous les sommets de l'objet (maillage / modèle formellement) subiront la transformation, c'est-à-dire que les 1000 sommets seront multipliés par la matrice modèle. Par conséquent, votre argument n'est pas bien formé. La matrice du modèle est simplement la matrice qui transforme les sommets de l'espace modèle en l'espace du monde. Il n'y a aucun avantage en termes de performances ici, c'est juste la commodité.
legends2k

Si tel est le cas, pourquoi ne représentent-ils pas simplement chaque point dans un seul espace 3D? Il devrait y avoir des avantages lorsque vous utilisez la sortie d'une scène vers une autre scène qui pourrait être une entrée vers une autre scène mobile :)
cegprakash

1
Ils ne représentent pas tous les sommets dans un seul espace car il est pratique de travailler dans un espace relatif plutôt que dans un espace plus grand, comme le monde. Dites à un robot, lorsqu'il lui est ordonné de se déplacer de 2 mètres vers l'avant, le faire avec son œil est plus approprié pour lui que de localiser le centre du monde, puis de calculer les coordonnées correctes qui en résultent.
legends2k

Je pense que vous avez raison. De toute façon, le shader de fragment sera appelé pour chaque pixel et nous effectuerons des multiplications matricielles pour chaque pixel en cas de maillages complexes. : |
cegprakash

2
Dans le fragment shader, seuls les calculs d'éclairage / coloration sont effectués, au moment où les données atteignent le fragment shader, tous les calculs de position sont terminés (c'est-à-dire dans le vertex shader); une meilleure explication sur pourquoi utiliser plusieurs systèmes de coordonnées est ici . Ce livre est une excellente ressource mathématique de jeux 3D. Le même chapitre qu'un exemple de PDF du site Web du livre .
legends2k
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.