Synthèse d'Image - TD2 : Courbes: B-Splines, Béziers, ...



Home Research Publications Teaching Personal

Introduction

Dans ce TD, nous allons apprendre à tracer les courbes vues en cours. Pour ce faire, un squelette de code vous est fourni.

Taches à réaliser

  • Tout d'abord, téléchargez et décompressez le squelette de code, Le code correspond au code du TD1, avec l'application à la souris effectuée.

  • Nous allons commencez par tracez les points de contrôles, ainsi que les lignes brisées les reliants. Pour ce faire, affichez en gros les points de controles, et en fin les lignes brisées.

  • Nous allons maintenant nous intéressez aux différentes courbes. Chaque type de courbes peuvent être effectué individuellement. Pensez à la touche 'c' pour changez de type de courbes!

  • Enfin, indépendamment du tracer des courbes, Vous devrez créer les fonctions permettant de déplacer les points de contrôles.

  • B-Splines

    Vous devez programmer les courbes de type B-Splines dont la formule est:


    Les courbes B_Splines nécessitent au moins 4 points de contrôles afin d'être tracer.

    Béziers

    Vous devez programmer les courbes de type Bézier dont la formule est:


    Les courbes Béziers nécessitent au moins 4 points de contrôles afin d'être tracer.

    Subdivision

    Vous devez programmer une subdivision des points de contrôles. Ce sont les plus difficiles à implémenter, puisqu'elles n'ont pas d'équations précises.

    Pour ce TD, vous programmerez n'importe quelles subdivisions vu en cours. Effectuez seulement 4 étapes de subdivisions.

    Voici un exemple de subdivisions efficaces:
  • Chaque point de l'étape précédente est conservé (ce sont les points de rang 2i
  • les autres points (2i+1) sont définis par:

  • Déplacement des points de contrôles

    La dernière étape à programmer pour ce TD est le déplacement des points de contrôles. Pour ce faire, vous devez tout d'abord affecter à la touche 'd' un boolean de mode: soit en mode création de point, soit en mode déplacement de point. Modifiez la fonction keyboard en conséquence.

    Modifier maintenant la fonction mouse pour qu'elle prenne en compte ce boolean. En mode déplacement, elle devra chercher le point le plus proche du pointeur, et changer la couleur de ce point.

    Enfin, nous allons créer une nouvelle fonction: motion(int x, int y) pour le déplacement. Il devra être affecté dans le main, en dessous de glutMouseFunc, par glutMotionFunc.

    Remarques

  • Pour changer la taille des points: glPointSize(float)
  • Pour changer la taille des lignes: glLineWidth(float)
  • Pour certaines fonctions (comme glPointSize(float)), il est parfois nécessaires d'activer un boolean. Vous pouvez remarquer que GL_POINT_SIZE est activé dans draw_scene