Partager via


Vecteurs normaux à une face ou un sommet

Chaque visage d’un maillage a un vecteur normal d’unité perpendiculaire. La direction du vecteur est déterminée par l’ordre dans lequel les sommets sont définis et en indiquant si le système de coordonnées est de droite ou gaucher.

Vecteur normal de l’unité perpendiculaire pour un visage avant

Chaque visage d’un maillage a un vecteur normal d’unité perpendiculaire. La direction du vecteur est déterminée par l’ordre dans lequel les sommets sont définis et en indiquant si le système de coordonnées est de droite ou gaucher. Les points normaux du visage loin du côté avant du visage. Dans Direct3D, seul l’avant d’un visage est visible. Un visage avant est celui dans lequel les sommets sont définis dans l’ordre des aiguilles d’une montre.

L’illustration suivante montre un vecteur normal pour un visage avant :

un vecteur normal pour un visage avant

Culling back faces

Tout visage qui n’est pas un visage avant est un visage arrière. Direct3D ne restitue pas toujours les visages de retour ; les visages de dos sont dits être abattus. Le culage des visages arrière signifie éliminer les visages arrière du rendu. Vous pouvez modifier le mode culling pour afficher les visages de retour si vous le souhaitez. Pour plus d’informations, voir Culling State .

Normales de l’unité de vertex

Direct3D utilise les normales de l’unité de vertex pour les effets d’ombrage, d’éclairage et de texturation Gouraud.

L’illustration suivante montre les normales de vertex :

normales de vertex

Lors de l’application de l’ombrage De Gouraud à un polygone, Direct3D utilise les normales de vertex pour calculer l’angle entre la source de lumière et la surface. Il calcule les valeurs de couleur et d’intensité des sommets et les interpole pour chaque point sur toutes les surfaces de la primitive. Direct3D calcule la valeur d’intensité de la lumière à l’aide de l’angle. Plus l’angle est élevé, moins la lumière brille sur la surface.

Surfaces plates

Si vous créez un objet plat, définissez les normales de vertex pour qu’elles pointent perpendiculairement à la surface.

L’illustration suivante montre une surface plate composée de deux triangles avec des normales de vertex :

surface plate composée de deux triangles avec des normales de vertex

Ombrage lisse sur un objet non plat

Au lieu d’un objet plat, il est plus probable que votre objet soit constitué de bandes de triangles et que les triangles ne sont pas coplanaires. Une façon simple d’obtenir l’ombrage lisse sur tous les triangles de la bande consiste à calculer d’abord le vecteur normal de surface pour chaque face polygonale avec laquelle le sommet est associé. La normale de vertex peut être définie pour faire un angle égal à chaque surface normale. Toutefois, cette méthode peut ne pas être suffisamment efficace pour les primitives complexes.

Cette méthode est illustrée par le diagramme suivant, qui montre deux surfaces, S1 et S2 vu bord-on de ci-dessus. Les vecteurs normaux pour S1 et S2 sont affichés en bleu. Le vecteur normal de vertex est affiché en rouge. L’angle que le vecteur normal de vertex effectue avec la normale de surface de S1 est identique à l’angle entre la normale du sommet et la normale de la surface de S2. Lorsque ces deux surfaces sont allumées et ombrées avec l’ombrage de Gouraud, le résultat est un bord lissement ombré et arrondi entre eux.

L’illustration suivante montre deux surfaces (S1 et S2) et leurs vecteurs normaux et vecteurs normaux de vertex :

deux surfaces (s1 et s2) et leurs vecteurs normaux et vecteurs normaux de vertex

Si le sommet normal se penche vers l’un des visages avec lesquels il est associé, il provoque l’augmentation ou la diminution de l’intensité de la lumière pour les points de cette surface, selon l’angle qu’elle fait avec la source de lumière. Le diagramme suivant illustre un exemple. Ces surfaces sont visibles en périphérie. La normale de vertex se penche vers S1, ce qui lui permet d’avoir un angle plus petit avec la source de lumière que si la normale du vertex avait des angles égaux avec les normales de la surface.

L’illustration suivante montre deux surfaces (S1 et S2) avec un vecteur normal de vertex qui se penche vers un visage :

deux surfaces (s1 et s2) avec un vecteur normal de vertex qui se penche vers un visage

Arêtes nettes

Vous pouvez utiliser l’ombrage Gouraud pour afficher certains objets dans une scène 3D avec des bords aigus. Pour ce faire, dupliquez les vecteurs normaux de vertex à n’importe quelle intersection des visages où un bord aiguisé est nécessaire.

L’illustration suivante montre les vecteurs normaux de vertex dupliqués aux bords aigus :

vecteurs normaux de vertex dupliqués aux arêtes nettes

Si vous utilisez les méthodes DrawPrimitive pour restituer votre scène, définissez l’objet avec des arêtes nettes comme une liste de triangles, plutôt qu’une bande de triangles. Lorsque vous définissez un objet comme une bande de triangles, Direct3D le traite comme un polygone unique composé de plusieurs visages triangulaires. L’ombrage gouraud est appliqué à la fois sur chaque face du polygone et entre les visages adjacents.

Le résultat est un objet facilement ombré du visage au visage. Étant donné qu’une liste de triangles est un polygone composé d’une série de visages triangulaires disjoints, Direct3D applique l’ombrage De Gouraud sur chaque face du polygone. Toutefois, il n’est pas appliqué du visage au visage. Si deux ou plusieurs triangles d’une liste de triangles sont adjacents, ils semblent avoir un bord aigu entre eux.

Une autre alternative consiste à passer à l’ombrage plat lors du rendu d’objets avec des arêtes nettes. Il s’agit de la méthode la plus efficace, mais elle peut entraîner des objets dans la scène qui ne sont pas rendus aussi réalistement que les objets qui sont ombrés gouraud.

Systèmes de coordonnées et géométrie