53 votes

Pourquoi serait-il avantageux d’avoir une matrice de projection séparée tout en combinant modèle et vue?

Lorsque vous êtes à l'apprentissage de la programmation 3D, on vous apprend que c'est plus facile de penser en termes de 3 matrices de transformation:

  1. Le Modèle De La Matrice. Cette matrice est propre à chaque modèle et de la rotation des échelles de l'objet souhaité et enfin le déplace vers sa position finale à l'intérieur de votre monde en 3D. "Le Modèle de la Matrice transforme les coordonnées de modèle pour les coordonnées du monde".

  2. La Matrice De Vue. Cette matrice est généralement le même pour un grand nombre d'objets (si pas pour tous) et il tourne et se déplace tous les objets selon la "position de la caméra". Si vous l'imagerie 3D de la scène est filmée par une caméra et de ce qui est affiché sur l'écran sont des images qui ont été capturées par l'appareil photo, l'emplacement de la caméra et de sa direction d'observation définir les parties de la scène sont visibles et comment les objets apparaissent sur l'image capturée. Il y a peu de raisons de modifier la matrice de vue du rendu d'une seule image, mais ceux-ci, en fait, il existe (par exemple, par le rendu de la scène à deux reprises et la modification de la matrice de vue entre les deux, vous pouvez créer un très simple, mais impressionnant miroir à l'intérieur de votre scène). Généralement, le point de vue des changements de la matrice seule fois entre deux images dessinées. "La Matrice de Vue transforme les coordonnées du monde à l'œil les coordonnées".

  3. La Matrice De Projection. La matrice de projection décide de la façon dont ceux des coordonnées 3D sont mappés à des coordonnées 2D, par exemple si il y a un point de vue appliqué (les objets sont petits plus ils sont loin de l'observateur) ou non (projection orthogonale). La matrice de projection à peine les changements à tous. Il peut avoir à changer si vous êtes rendu dans une fenêtre et la taille de la fenêtre a changé ou si vous êtes rendu en plein écran et de la résolution a changé, mais seulement si la nouvelle taille de la fenêtre/résolution de l'écran a un autre format d'image qu'avant. Il y a quelques effets de fou pour que vous pouvez modifier cette matrice, mais dans la plupart des cas à peu près constante pour l'ensemble vivre de votre programme. "La Matrice de Projection transforme œil coordonnées en coordonnées d'écran".

Cela fait beaucoup de sens pour moi. Bien sûr on peut toujours combiner les trois matrices en une seule, depuis la multiplication d'un vecteur d'abord par la matrice A , puis par la matrice B est le même que la multiplication du vecteur par la matrice CC = B * A.

Maintenant, si vous regardez le classique OpenGL (OpenGL 1.x/2.x), OpenGL connaît une matrice de projection. Pourtant, OpenGL n'offre pas un modèle ou une matrice de vue, il ne propose qu'un modèle combiné-matrice de vue. Pourquoi? Cette conception vous oblige en permanence d'enregistrer et de restaurer la "matrice de vue" depuis elle permettra d'obtenir des "détruit" par les transformations de modèles sont appliqués. Pourquoi ne sont pas là les trois matrices?

Si vous regardez les nouvelles versions d'OpenGL (OpenGL 3.x/4.x) et que vous n'utilisez pas le classique pipeline de rendu, mais de personnaliser le tout avec des shaders (GLSL), il n'y a pas matrices étant plus disponible, vous devez définir vos propres matrices. Encore la plupart des gens gardent l'ancien concept d'une matrice de projection et un modèle-vue de la matrice. Pourquoi voudriez-vous faire cela? Pourquoi pas à l'aide de trois matrices, ce qui signifie que vous n'avez pas de permanence d'enregistrer et de restaurer le modèle de matrice de vue, ou si vous utilisez un combiné unique modèle-vue-projection (MVP) de la matrice, qui permet d'éviter une multiplication de matrice dans votre vertex shader pour jamais seul sommet de rendu (après tout, une telle multiplication ne vient pas gratuitement non plus).

Donc, pour résumer ma question: Quel avantage a un modèle combiné-matrice de vue, ensemble, avec une part la matrice de projection sur avoir trois matrices ou un seul titre de MVP de la matrice?

43voto

Nicol Bolas Points 133791

Regarde pratiquement. D'abord, le nombre de matrices de vous envoyer, moins le nombre de matrices à multiplier les positions/normales/etc. Et par conséquent, plus votre vertex shaders.

Pour que le point 1: moins de matrices, c'est mieux.

Cependant, il ya certaines choses que vous avez probablement besoin de le faire. Sauf si vous êtes en train de faire le rendu 2D ou une simple démo 3D-applications, vous allez avoir besoin de faire de l'éclairage. Cela signifie généralement que vous allez avoir besoin de transformer des postes et des normales dans l'autre monde ou les caméra (vue) de l'espace, puis faire un peu d'éclairage d'opérations (soit dans le vertex shader ou le fragment shader).

Vous ne pouvez pas faire cela si vous allez seulement à partir du modèle de l'espace à l'espace de projection. Vous ne pouvez pas faire de l'éclairage dans l'après-espace de projection, parce que l'espace est non-linéaire. Le calcul devient beaucoup plus compliqué.

Donc, point 2: Vous avez besoin d'au moins un arrêt entre le modèle et la projection.

Nous avons donc besoin d'au moins de 2 matrices. Pourquoi le modèle de la caméra plutôt que de modèle pour le monde? Parce que travailler dans le monde de l'espace dans les shaders est une mauvaise idée. Vous pouvez rencontrer de la précision numérique des problèmes liés à des traductions qui sont éloignés de l'origine. Tandis que si vous avez travaillé dans la caméra de l'espace, vous n'aurez pas ces problèmes, parce que rien n'est trop loin de la caméra (et si elle l'est, il devrait probablement être à l'extérieur de la mesure de la profondeur de l'avion).

Donc: nous utilisons la caméra de l'espace que l'espace intermédiaire pour l'éclairage.

3voto

Tal Darom Points 655

Dans la plupart des cas, votre shader aura besoin de la géométrie dans les coordonnées du monde ou de l'œil pour l'ombrage; vous devez donc séparer la matrice de projection du modèle et des matrices de vue.

Faire que votre shader multiplie la géométrie avec deux matrices nuit aux performances. En supposant que chaque modèle comporte des milliers (ou plus) de sommets, il est plus efficace de calculer une seule fois la matrice de vue de modèle dans l'unité centrale, et de laisser le shader multiplier une multiplication de moins par mtrix-vecteur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X