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

#include <d3dx10math.h>

void ComputeNormal(D3DXVECTOR3* p0, D3DXVECTOR3* p1, D3DXVECTOR3* p2,
                   D3DXVECTOR3* out)
{
    D3DXVECTOR3 u = *p1 - *p0;
    D3DXVECTOR3 v = *p2 - *p0;

    D3DXVec3Cross(out, &u, &v);

    D3DXVec3Normalize(out, out);
}

 

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

#include <d3dx10math.h>

void Normalize(D3DXVECTOR3& v)
{
    unsigned int iLength = sqrt((v.x * v.x) + (v.y * v.y) + (v.z * v.z));

    v.x /= iLength;
    v.y /= iLength;
    v.z /= iLength;
}

 

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *