La normale (vecteur)

normale

Intro :

La normale est un vecteur perpendiculaire à un triangle ou une face quelconque.

Prérequis :

– Savoir ce qu’est un vecteur et les opérations algébriques associées.

Explications :

La normale décrit dans quelle direction une face est dirigée. La normale est un vecteur d’unité 1, puisqu’il a été normalisé. Elle est perpendiculaire à tous les points de la face.

Comment calculer la normale ?

On cherche à trouver deux vecteurs d’une face donnée en prenant le produit vectoriel de ces deux là.

Pour trouver la normale d’un triangle \(\Delta\vec{p_0}\vec{p_1}\vec{p_2} \), on calcule ces deux vecteurs d’arrêtes (côtés) du triangle.

\(\vec{u} = \vec{p_1} – \vec{p_2} \)
\(\vec{v} = \vec{p_2} – \vec{p_0} \)
\(\vec{n} = (\vec{u}\times\vec{v}) / \|\vec{u}\times\vec{v}\| \)

Voici l’algorithme en C++ :

On peut la calculer autrement :

\(n_{x} = u_{y}v_{z} – u_{z}v_{y} \)
\(n_{y} = u_{z}v_{x} – u_{x}v_{z} \)
\(n_{z} = u_{x}v_{y} – u_{y}v_{x} \)

Comment la normaliser ?

\({\vec{v}}_{norm}=\frac{{\vec{n}}}{\|{\vec{n}}\|} \)

Voici l’algorithme en C++ :

A quoi sert la normale ?

La normale est utilisée dans le calcul de la nuance de lumière d’une face en utilisant la loi de Lambert. De cette façon nous pouvons déterminer l’angle à laquelle la lumière frappe un vertex.

Elle est aussi utilisée dans le rendu du « Bump Mapping ».

Transformation de la normale par une mise à l’échelle non uniforme :

On doit faire attention aux vecteurs normales lorsqu’on fait une opération d’agrandissement (de mise à l’échelle / de scaling) autre que d’unité 1 ou non-uniforme.

[schéma / dessin]

La normale est correctement transformée avec la matrice de transformation d’agrandissement inversée et transposée.

Résumé :

Nous avons présenté le vecteur normal ; entité mathématique qui sert notamment à effectuer le calcul lumineux d’un modèle.

Références :

– https://www.opengl.org/wiki/Calculating_a_Surface_Normal