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 par le système de coordonnées à droite ou à gauche.

Vecteur normal de l’unité perpendiculaire pour une face 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 par le système de coordonnées à droite ou à gauche. Le visage normal pointe loin du côté avant du visage. Dans Direct3D, seul l’avant d’un visage est visible. Une face avant est une face dans laquelle les sommets sont définis dans l’ordre dans le sens des aiguilles d’une montre.

L’illustration suivante montre un vecteur normal pour une face avant :

vecteur normal pour une face avant

Élimination des visages arrière

Tout visage qui n’est pas une face avant est un visage arrière. Direct3D ne rend pas toujours les visages arrière; les visages arrière sont dits être abattus. L’élimination de la face arrière signifie l’élimination des faces arrière du rendu. Vous pouvez modifier le mode d’élimination pour restituer les visages si vous le souhaitez. Pour plus d’informations, consultez État d’élimination .

Valeurs 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 :

Valeurs 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é lumineuse à l’aide de l’angle. Plus l’angle est grand, moins la lumière brille sur la surface.

Surfaces planes

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 plane composée de deux triangles avec des normales de vertex :

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

Ombrage lisse sur un objet non plat

Plutôt qu’un objet plat, il est plus probable que votre objet soit constitué de bandes de triangles et que les triangles ne soient pas coplanaires. Un moyen simple d’obtenir un ombrage lisse sur tous les triangles de la bande consiste à calculer d’abord le vecteur normal de surface pour chaque face polygonale à laquelle le sommet est associé. Le sommet normal peut être défini pour faire un angle égal à chaque surface normale. Toutefois, cette méthode peut ne pas être assez efficace pour les primitives complexes.

Cette méthode est illustrée par le diagramme suivant, qui montre deux surfaces, S1 et S2 vues de bord par dessus. Les vecteurs normaux pour S1 et S2 sont affichés en bleu. Le vecteur normal du vertex est affiché en rouge. L’angle que le vecteur normal de vertex effectue avec la normale de surface de S1 est le même que l’angle entre le sommet normal et la normale de surface de S2. Lorsque ces deux surfaces sont éclairé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 vecteur normal de vertex :

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

Si le sommet normal se penche vers l’une des faces auxquelles il est associé, cela entraîne une augmentation ou une diminution de l’intensité lumineuse pour les points sur cette surface, en fonction de l’angle qu’il fait avec la source de lumière. Le diagramme suivant illustre un exemple. Ces surfaces sont visibles sur le bord. La normale de vertex se penche vers S1, ce qui l’amène à avoir un angle plus petit avec la source de lumière que si le sommet normal avait des angles égaux avec les normales de surface.

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

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

Arêtes nettes

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

L’illustration suivante montre des vecteurs normaux de vertex dupliqués aux arêtes nettes :

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 triangle, Direct3D le traite comme un polygone unique composé de plusieurs faces triangulaires. L’ombrage gouraud est appliqué à la fois sur chaque face du polygone et entre les visages adjacents.

Le résultat est un objet qui est ombré en douceur d’un visage à l’autre. Étant donné qu’une liste de triangles est un polygone composé d’une série de faces triangulaires disjointes, Direct3D applique l’ombrage de Gouraud sur chaque face du polygone. Toutefois, il n’est pas appliqué de face à face. Si plusieurs triangles d’une liste de triangles sont adjacents, ils semblent avoir un bord net entre eux.

Une autre alternative consiste à passer à l’ombrage plat lors du rendu d’objets avec des bords nets. C’est la méthode la plus efficace du point de vue du calcul, mais elle peut aboutir à des objets de 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