Share via


Transformation de la projection

Une transformation de projection contrôle les éléments internes de la caméra, comme le choix d’un objectif pour une caméra. Il s’agit du plus compliqué des trois types de transformation.

La matrice de projection est généralement une projection d’échelle et de perspective. La transformation de projection convertit le frustum d’affichage en une forme cuboïde. Étant donné que la fin proche du frustum d’affichage est plus petite que l’extrémité lointaine, cela a pour effet de développer des objets qui sont proches de la caméra; c’est ainsi que la perspective est appliquée à la scène.

Dans le frustum d’affichage, la distance entre la caméra et l’origine de l’espace de transformation d’affichage est définie arbitrairement comme D, de sorte que la matrice de projection ressemble à l’illustration suivante.

illustration de la matrice de projection

La matrice d’affichage traduit la caméra en origine en traduisant dans la direction z par - D. La matrice de traduction est semblable à l’illustration suivante.

illustration de la matrice de traduction

La multiplication de la matrice de traduction par la matrice de projection (T*P) donne la matrice de projection composite, comme illustré dans l’illustration suivante.

illustration de la matrice de projection composite

La transformation de perspective convertit un frustum d’affichage en un nouvel espace de coordonnées. Notez que le frustum devient cuboïde et que l’origine se déplace du coin supérieur droit de la scène au centre, comme illustré dans le diagramme suivant.

diagramme montrant comment la transformation de perspective transforme le frustum d’affichage en un nouvel espace de coordonnées

Dans la transformation de perspective, les limites des directions x et y sont -1 et 1. Les limites de la direction z sont 0 pour le plan avant et 1 pour le plan arrière.

Cette matrice traduit et met à l’échelle les objets en fonction d’une distance spécifiée entre la caméra et le plan de découpage proche, mais elle ne tient pas compte du champ de vision (fov), et les valeurs z qu’elle produit pour les objets de la distance peuvent être presque identiques, ce qui rend les comparaisons de profondeur difficiles. La matrice suivante traite ces problèmes et ajuste les sommets pour prendre en compte les proportions de la fenêtre d’affichage, ce qui en fait un bon choix pour la projection de perspective.

illustration d’une matrice pour la projection en perspective

Dans cette matrice, Zn est la valeur z du plan de découpage proche. Les variables w, h et Q ont les significations suivantes. Notez que fovw et fovk représentent les champs de vue horizontaux et verticaux de la fenêtre d’affichage, en radians.

équations des significations des variables

Pour votre application, l’utilisation d’angles de champ de vue pour définir les coefficients de mise à l’échelle x et y peut ne pas être aussi pratique que l’utilisation des dimensions horizontales et verticales de la fenêtre d’affichage (dans l’espace de la caméra). À mesure que les mathématiques fonctionnent, les deux équations suivantes pour w et h utilisent les dimensions de la fenêtre d’affichage et sont équivalentes aux équations précédentes.

équations des significations des variables w et h

Dans ces formules, Zn représente la position du plan de découpage proche, et les variables Vw et Vh représentent la largeur et la hauteur de la fenêtre d’affichage, dans l’espace de la caméra.

Quelle que soit la formule que vous décidez d’utiliser, veillez à définir Zn sur une valeur aussi grande que possible, car les valeurs z extrêmement proches de l’appareil photo ne varient pas beaucoup. Cela complique quelque peu les comparaisons de profondeur à l’aide de z-buffers 16 bits.

Une matrice de projection compatible w

Direct3D peut utiliser le composant w d’un sommet qui a été transformé par le monde, les matrices de vue et de projection pour effectuer des calculs basés sur la profondeur dans des effets de mémoire tampon de profondeur ou de brouillard. Les calculs tels que ceux-ci nécessitent que votre matrice de projection normalise w pour être équivalente à l’espace mondial z. En bref, si votre matrice de projection comprend un coefficient (3,4) qui n’est pas 1, vous devez mettre à l’échelle tous les coefficients par l’inverse du coefficient (3,4) pour créer une matrice appropriée. Si vous ne fournissez pas de matrice conforme, les effets de brouillard et la mise en mémoire tampon de profondeur ne sont pas appliqués correctement.

L’illustration suivante montre une matrice de projection non conforme et la même matrice mise à l’échelle de sorte que le brouillard relatif des yeux soit activé.

illustrations d’une matrice de projection non conforme et d’une matrice avec brouillard relatif aux yeux

Dans les matrices précédentes, toutes les variables sont supposées être différentes de zéro. Pour plus d’informations sur la mise en mémoire tampon de profondeur basée sur w, consultez Mémoires tampons de profondeur.

Direct3D utilise la matrice de projection actuellement définie dans ses calculs de profondeur basés sur w. Par conséquent, les applications doivent définir une matrice de projection conforme pour recevoir les fonctionnalités w souhaitées, même si elles n’utilisent pas Direct3D pour les transformations.

Transformations