mai
24

B-Spline et Extrusion de surfaces paramétrées

Ce projet est l’aboutissement de l’année passé avec Mr Marc Bianchini pour le cours de « Mathématiques appliquées à l’infographie » de la seconde année d’ingénierie à l’ESGI.

Ce cours vise à donner aux étudiants une première approche des outils mathématiques et algorithmiques nécessaire à la programmation graphique autant 2D que 3D.

Après avoir vue et réalisé différents programmes de traçage 2D, fenêtrage, remplissage de polygone et autres courbes paramétrés (de Bézier), ce projet de fin d’année consistait à réaliser un programme contenant les fonctionnalités suivantes :

  • Dessin des courbes de B-Spline.
  • Approximation des bords, et bouclement de la courbe.
  • Extrusion 3D linéaire et par rotation de la courbe.
  • Extrusion généralisée de la courbe via une seconde.
  • Algorithme du Z-Buffer.

Grâce à la réunion des différentes fonctionnalités précédentes, nous devrions aboutir au résultat suivant :

Extrusion généralisée de 2 splines.

Il est à noter que dû la contrainte de temps pour la réalisation du projet, l’algorithme du Z-Buffer ne sera pas implémenté dans le projet.

Manuel d’utilisation du logiciel

Généralités

Le logiciel se présente sous la forme de plusieurs fenêtres qui successivement permettrons de réaliser différentes actions à la souris. La navigation entre les différentes fenêtres se fera par l’intermédiaire d’un menu contextuel disponible grâce au « clic droit » de votre mulot. les éventuelles raccourcis clavier sont précisés dans le menu contextuel entre crochet.

Dessin d’une courbe B-Spline

Pour dessiner une courbe rien de plus simple, il suffit de cliquer sur la fenêtre ce qui ajoutera à chaque fois un point de contrôle. Il est possible de modifier un point de contrôle en cliquant dessus et en le faisant clisser.

Par défaut, la courbe cubique, mais le degrés peut être changé grâce aux différentes options :
touche ’1′ : spline classique.
touche ’2′ :approximation des extrémités de la spline.
touche ’3′ : spline fermée.
touche ‘+’ / ‘-’ : diminution ou augmentation du degrés de la courbe.

Exemple d’une courbe de degré 6 avec approximation des extrémités :

Bspline degré6

Une fois la courbe tracée sur la fenêtre principale, le menu contextuel vous permet d’effectuer une extrusion linéaire ou par rotation.

Extrusion Linéaire

L’extrusion linéaire se fait via 2 facteurs :

  • Un coefficient de longueur d’extrusion qui définie la taille de la surface
  • Un coefficient d’homothétie de l’extrémité de la face extrudée.

Ces 2 paramètres sont modifiables à la souris en maintenant le clic gauche. Avec un déplacement verticale on modifie le coefficient de longueur, alors qu’un déplacement horizontal modifie le facteur d’homothétie.
Le « clic molette » permet d’effectuer une rotation autour de la surface extrudée.
Enfin le menu contextuel vous permet d’afficher la surface en mode filaire, plein, ou de fermer la fenêtre.

Exemple d’extrusion linéaire avec la spline tracée précédemment :

Extrusion lineaire

Extrusion par rotation

L’extrusion par rotation se fait suivant l’axe tracé en vert sur la fenêtre principale. L’extrusion se fait suivant un unique coefficient :

  • le coefficient de rotation

Ce coefficient est modifiable en maintenant le clic gauche de la souris avec un déplacement vertical. Pour les clore la surface et obtenir une forme finie, il est possible de fermer la figure via le menu contextuel.

Exemple de rotation utilisant toujours la même spline :

Extrusion par rotation

Un peu d’art…

La rotation est de loin l’extrusion que je préfère. Du fait du nombre de face fixe et du coefficient de rotation libre, il est possible d’arriver à des formes pour le moins originale …

art1

art2

art3

Laissez parler votre créativité….

Extrusion généralisée

Cette dernière extrusion est accessible en 2 temps :

  • Vous définissez le gabarit de votre surface dans la fenêtre principale et accédez à l’option « Définir l’âme » dans le menu contextuel pour accéder à une nouvelle fenêtre.
  • Cette nouvelle fenêtre vous permet de dessiner une seconde courbe en bleue. Cette courbe, ou « Ame » est la forme sur laquelle sera extrudée la première spline. Vous pouvez aussi accéder à un nouveau menu contextuel pour modifier cette même courbe et lancer l’extrusion généralisée de votre première courbe en fonction de la seconde via l’option : « Extrusion généralisée !! »
Exemple d’âme :

Ame de la courbe

Extrusion généralisée de la toute première courbe avec l’âme précédente :

Extrusion généralisée

Problèmes rencontrés

Le premier problème rencontré lors du projet, est la compréhension de l’algorithme de Cox de Boor, avec le déchiffrage des différentes variables, en particulier la notion d’enveloppe convexe et du fameux « r » à fixer.
Un fois cette étape surmontée, c’est le vecteur nodal qui à posé problème car la relation qui le lie aux différents point de contrôle était assez flou au début. Le fait d’avoir un vecteur nodal d’une cardinalité plus grande que le nombre de point de contrôle était assez déstabilisant. De part ces difficultés d’appréhension, j’ai tenté d’implémenter la longueur de corde, et le paramétrage centripète mais sans résultat. Les calculs de longueurs sont correct (fonctions en commentaire dans la classe B_Spline.cpp) mais leur intégration au vecteur nodal n’a pas obtenu de résultat concluant.
Une fois la spline tracée correctement, les extrusions linéaires et par rotation ont étés assez rapide à mettre en oeuvre. Mais c’est l’extrusion généralisé qui présenté un nouveau problème.
En effet, c’est le calcul du vecteur dérivé en un point de la courbe qui posait problème. En tentant de dériver une courbe de degré fixe les résultats présentaient l’incohérence la plus totale. C’est pourquoi cette solution a été abandonnée et remplacée par la simple différence du successeur et prédécesseur du point donnée. Cette technique à la mérite d’être simple et peu coûteuse en calcul, mais est bien moins précise.

Le dernier problème est d’ordre naturel, c’est le temps. En effet devant la période qu’il nous était impartie, j’ai préféré ne pas implémenter l’algorithme du Z-Buffer pour peaufiner l’existant et produire ce beau dossier.

Les sources du projet.

Maintenant la partie qui vous intéressera surment le plus à savoir les sources du logiciel.

Vous pourrez les télécharger >> ici <<


Pas de commentaire

Pas encore de commentaire.

Comments RSS Feed  

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

top