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 , on calcule ces deux vecteurs d’arrêtes (côtés) du triangle.
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 :
Comment la normaliser ?
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

