Vecteurs normaux visage et vertex (Direct3D 9)

Chaque visage d’un maillage a un vecteur normal d’unité perpendiculaire, comme illustré dans l’illustration suivante. 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.

illustration d’un vecteur normal pour une face avant

Tout visage qui n’est pas une face avant est un visage arrière. Direct3D ne rend pas toujours les visages arrière; par conséquent, les visages arrière sont dits être abattus. Vous pouvez modifier le mode d’élimination pour restituer les visages si vous le souhaitez. Pour plus d’informations, consultez État d’élimination (Direct3D 9).

Direct3D utilise les normales de l’unité de vertex pour les effets d’ombrage, d’éclairage et de texturation Gouraud. L’illustration suivante montre des exemples de normalités.

illustration des 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.

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

illustration d’une surface plane composée de deux triangles avec des normales de vertex

Toutefois, 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.

diagramme de 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. Là encore, ces surfaces sont visibles de côté. 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.

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

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, comme illustré dans l’illustration suivante.

illustration de 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