mar
04

Courbes et Surfaces de Bézier

Les courbes et surfaces de Bézier sont des fondamentaux dans le domaine de l’infographie, on les trouve aujourd’hui beaucoup en informatique (CAO, FAO, police de texte « postcript »…). Elles sont une alternative à d’autres formalismes de courbes telles que les B-splines, Coons, NURBS… Nous allons en voir la théorie dans le cas générale, mais surtout voir un cas pratique avec une mise en application grâce à OpenGL en C++.

Pierre Etienne Bézier

Pierre BezierTout d’abord, Pierre Etienne Bézier (1910 -1999). C’était un ingénieur en mécanique et électronique chez Renault, il c’est entre autre penché sur le moyen de modéliser simplement des formes complexes afin de développer les machines à commande numérique de l’industrie automobile. C’est en 1962 qu’il formalise les courbes de Bézier.

I . Les Courbes de Bézier

Les courbes de Bézier sont courbes polynomiales paramétriques, un mot on ne peu plus savant expliquant que la courbe est exprimée par une fonction polynôme d’un degré quelconque et est représenté sur un intervalle qui est son paramètre.
Le principe générale est de définir un ensemble de points (ou points de contrôles) qui vont servir à influencer la trajectoire de la courbe, on l’appel aussi le « Polygone de contrôle ». Grâce à ce polygone de contrôle, nous allons pouvoir approximer les points de la courbes en la discrétisant. Evidement seuls quelques points seront approximer, en les reliant entre eux nous auront une idée de la forme de la courbe. Ainsi plus le nombre de point approximer est grand, et plus la courbes aura l’air régulière.

Pour notre exemple nous prendrons un polygone de contrôle à 6 points (P1 à P6).

polygone de controle

La courbe ainsi obtenu sera de degré 5 (le nombre de point de contrôle moins un).

bezier2

Modélisation mathématique

Pour les plus forts en math, on peut modéliser cette courbe de la façon suivante :

formule courbe bezier

Avec « C » la fonction représentative de la courbe de Bézier, « P0″ à « Pn » l’ensemble des points de contrôle de la courbe, « B » la Base de Bernstein et « t » le paramètre.

Pour ceux qui comme moi on une fâcheuse tendance à oublier les formules voici un rappel du Polynôme (ou base) de Bernstein:

Base de Bernstein

Avec Ci,n représentant les coefficients binomiaux :

Combinaison

Voila, nous sommes maintenant suffisamment armé pour calculer cette courbe. Pour cela on va faire varier notre paramètre  » t  » de 0 à 1 en fonction du nombre de point à approximer. Dans l’exemple précédent, nous avons approximé 39 points, le paramètre à donc été incrémenté à chaque fois de 1/40.

Cette façon d’aborder le calcul d’une courbe de Bézier n’est pas des plus simples. Ainsi pour nous simplifier la tâche, nous allons utiliser un algorithme qui utilise la relation de récurrence du polynôme de Bernstein à savoir : l’algorithme de Casteljau.

L’algorithme de Casteljau

De son créateur Paul de Casteljau, un ingénieur cette fois-ci de chez Citroën. Son algorithme se base sur la relation de récurrence de la base de Bernstein :

Recurence Bernstein

Aller soyons fou, faisons en la démonstration… Un indice : il faut partir d’une propriété des coefficients binomiaux remarquable dans le triangle de pascale…

demonstration récurence Bernstein

Bon il est vrai que cela peut paraître abstrait. Nous allons donc reprendre l’exemple graphique du départ et réaliser pour chaque arête du polygone de contrôle :

  • Couper l’arête suivant l’intervalle défini par le paramètre  » t « . Si t = 1/3, on marquera pour chaque segment le premier tiers; si il vaut 1/2 on prendra chaque moitié…
  • Relier les coupures une à une pour obtenir n-1 nouvelles arêtes.
  • Subdiviser les nouvelles arêtes suivant le paramètre, pour engendrer n-2 nouvelles arêtes. etc…
  • Continuer la subdivision des nouvelles arêtes jusqu’à l’obtention d’un point unique.
  • Voila vous avez obtenu votre point de la courbe pour le paramètre donner !!!

Il ne vous reste plus qu’a réaliser le même algorithme en faisant varier le paramètre entre 1 et 0 et vous obtiendrez votre courbe.

Aller un petit exemple graphique pour mieux se représenter les choses :

Algorithme de Casteljau

Maintenant que vous connaissez la théorie, il ne nous reste plus qu’a passer à la pratique.

Application en C++

Le plus marrant est maintenant de porter toute cette théorie dans la pratique pour pouvoir dessiner soit même des courbes de Bézier.
Vous pourrez trouver >>ICI<< mon petit logiciel mettant en scène tout cela.

Pour dessiner sa courbe, rien de plus simple :

  • clic gauche : on ajoute un point de contrôle.
  • clic droit : on efface tout et on recommence.
  • Une fois un point de contrôle créé, vous pouvez toujours le modifier en cliquant dedans et en le faisant glisser.

Remarque

Si vous souhaiter compiler les sources, il vous faudra préalablement installer les librairies OpenGL et GLUT.
Sous linux vous pouvez utiliser Mesa qui est une implémentation open-sources d’openGL, pour le reste vous avez FreeGlut ou OpenGlut.
Sous Windows vous avez généralement openGL32 d’installé par défaut avec votre IDE (je vous conseil Code::block ), et pour Glut vous pouvez trouvez une implémentation d’openGlut sur Xmission.

II. Les surfaces de Bézier

Les surfaces ( patchs ou carreaux ) de Bézier sont la suite naturelle de cette article. Il en va de soit que modéliser une courbe peut être très utile, mais modéliser une surface avec le même concept de polygone de contrôle, peut s’avérer être un outils extrêmement puissant. Ainsi par un maillage de points de contrôle on va pouvoir modéliser l’ensemble d’une surface et influer sur l’ensemble de sa géométrie.

Pour vous mettre l’eau à la bouche, voici une surface de Bézier obtenu avec 4 points de contrôle aussi connu sous le nom de « Paraboloïde Hyperbolique« …

Paraboloide Hyperbolique

Modélisation mathématique

Voyons maintenant comment une surface de Bézier peut être définie mathématiquement :

Formule surface de Bézier

Comme précédemment B(n,i) (t) est toujours la base de Bernstein, mais cette fois-ci les points de contrôle sont définis par P une matrice à 2 dimensions de « n » par « m » points. De plus on remarque que la surface ne dépend plus d’un seul mais de 2 paramètres : « u » et « v ».

En se penchant de plus près sur la formule, on se rend compte qu’il y a en faite 2 courbes de Bézier imbriquées, d’où les 2 paramètres. C’est par cette constatation que nous allons construire notre surface en utilisant uniquement les calcules sur les courbes de Bézier.

Méthode de construction

Dans un premier temps, nous allons définir notre matrice de points de contrôle.

Surface de Bezier - points de controle

Dans notre exemple, nous avons une matrice de 3 x 3 soient… 9 points de contrôle. Nous allons maintenant faire ressortir les bords de notre carreau, histoire d’en avoir un petit aperçu de l’allure qu’aura notre courbe.

Pour cela, nous allons calculer les courbes de Bézier formées par les cotés de notre matrice. La matrice ayant 2 dimensions, nous avons donc 4 cotés. Pour obtenir ceci :

Bords de la surface

On peu d’ores et déjà remarquer que comme les courbes, les surfaces de Bézier seront contenues dans l’enveloppe de leurs polygone de contrôle.

Maintenant que nous avons une idée plus précise du résultat, nous allons commencer à bâtir notre surface. Pour ce faire, on va comme pour les bords calculer les courbes de Bézier, mais cette fois en considérant uniquement les colones (ou les lignes) de la matrice de contrôle. Comme dans notre exemple la matrice est de 3 x 3, nous allons donc construire 3 courbes de Bézier :

Bezier de controle

Ces courbes vont nous servir d’armature pour construire notre surface. En fait, nous allons plus précisément utiliser ces courbes comme des courbes de points de contrôle. Pour cela nous allons discrétiser toutes nos courbes avec le même nombre de points, et pour chaque points nous obtiendrons un nouveau point de contrôle.

Nouveaux points de contrôle

En reliant les nouveaux points de contrôle de chacune des courbes à un même paramètre donné, on peut définir les points de contrôle des courbes qui vont former notre surface. Ainsi on va créer autant de nouvelles courbes qu’on a discrétiser nos courbes de construction.

Architecture de la surface

Voila, il ne vous reste plus qu’a afficher votre surface ainsi que ses bords, et vous obtiendrez un beau carreau de Bézier.

Surface de bezier complète

Notre surface de Bézier possède les mêmes caractéristiques que la courbes, à savoir que si l’on modifie une seul point de contrôle, c’est ensemble de la surface qui est modifié. Voici un exemple dans le cas ou le point de contrôle central est déplacé :

Animation changement surface

Application en C++

Voila maintenant le tout en pratique, vous pouvez télécharger le petit programme que j’ai réalisé. Il ne met en scène que le cas d’une surface de Bézier de 3 par 3 points de contrôle. Libre à vous de modifier tout ça, et de nous faire une surface digne d’une map de Quake III.

Pour l’utilisation du logiciel, c’est enfantin :

  • clic gauche vous modifier la hauteur du point de contrôle centrale pour admirer la déformation du mesh de la surface.
  • clic droit vous pouvez effectuer une rotation de la surface.

Voila en espérant que cet article ait pu vous intéresser. Si vous avez des remarques, n’hésitez pas à laisser des commentaires.

Olivier.


3 commentaires

  • a gravatar Benichon Said:

    Bravo à toi Olivier, c’est à la fois explicite et propre. Très bon travail. Bonne continuation.

  • a gravatar nonifier Said:

    Merci à toi Bénichon ça fait plaisir ^^

  • a gravatar Julien Said:

    Wahoo ! Ca vaut tous les cours du prof ça ! Bravo très bon tuto !

    Si un jour l’envi te prend d’en faire un sur les matériaux et la lumière dans openGL je suis preneur :p

Comments RSS Feed  

Désolé, les commentaires sont fermés pour le moment.

top