1. dessiner ce velo en "fil de fer" (vue de côté/vue de face).
    utiliser le programme du td1 pour dessiner les cercles. utiliser une display list pour chaque roue. dessiner séparément les éléments rigides (roues/cadre/guidon).
  2. écrire une routine, utilisant gluCylinder (voir quadric pour l'utilisation de gluCylinder) et les fonctions de transformation glRotate et glTranslate, permettant de placer un tube de diamètre donné entre les points (x1,y1,0) et (x2,y2,0).
    void cyl(double x1, double y1, double x2, double y2, double d)
    {
      static GLUquadricObj *quadObj = NULL;
      double a=atan2(y2-y1,x2-x1)*180/M_PI;
      double l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
      if (!quadObj)
        quadObj = gluNewQuadric();
      
      glPushMatrix();
      glTranslatef(x2,y2,0);
      
      glRotatef(a,0,0,-1);
      glRotatef(90,1,0,0);
      gluQuadricDrawStyle(quadObj, GLU_FILL);
      gluQuadricNormals(quadObj, GLU_SMOOTH);
      gluCylinder(quadObj, 1, 1, l, 10, 5);
      glPopMatrix();
    }
    
  3. dessiner le cadre et le guidon du vélo en utilisant cette routine, et utiliser glutSolidTorus pour les pneus (utiliser des display lists !).
  4. éclairer le vélo par une lumière située à une élévation de 45º de l'horizon, venant de l'avant gauche du vélo dans sa position initiale.
  5. ajouter la possibilité d'activer/désactiver par des touches les propriétés suivantes: flat/smooth shading, dithering, observateur local/à l'infini (pour le calcul des éclairages), test de profondeur.
    glShadeModel(GL_SMOOTH/GL_FLAT), glEnable(GL_DITHER), glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_TRUE), glEnable(GL_DEPTH_TEST)
  6. déterminer les matériaux pour avoir des pneux et des poignées gris anthracite mat, un cadre bleu verni, des rayons en inox (on pourra utiliser teapot pour tester les matériaux).
  7. ajouter un feu rouge à l'arrière (rectangle) visible dans le noir mais non éclairant, et un feu blanc à l'avant, éclairant l'avant du vélo.
    glMaterialfv(GL_FRONT,GL_EMISSION,...) pour le feu arriere, positionner un spot directionnel pour le feu avant
  8. mettre au niveau du sol une moquette verte. un polygône suffit-il? essayer avec un maillage. ajouter un ciel bleu azur.
    un polygone ne suffit pas a cause dont la facon dont est calcule l'eclairage (interpole entre les 4 coins), il faut donc un quadrillage plus fin aux environs du velo). pour le ciel, utiliser glClearColor(...)
  9. ajouter une touche permettant de passer du jour à la nuit.
    on eteint le soleil, le ciel passer au bleu nuit, le phare s'allume
  10. créer une animation dans laquelle le vélo roule selon une trajectoire rectligne.
    utiliser glutIdleFunc(animate). les roues doivent tourner évidemment !
Facultatif :
  1. ajouter la possibilité de tourner le guidon autour de son axe (on estime que le point de contact de la roue avant ne bouge pas, en première approximation).
  2. étant donnée la trajectoire C(t) du point de contact de la roue avant, afficher les positions successives du vélo. essayer plusieurs trajectoires (cercle, huit, circuit).
  3. ajouter la possibilité de piloter le vélo avec la souris.
  4. le vélo doit se pencher dans les virages, en fonction de sa vitesse et du rayon de courbure de la trajectoire. se souvenir des cours de mécanique du lycée...
  5. simuler le coucher de soleil pendant la ballade à vélo (l'intensité de la lumière diminue, la couleur devient orangée, l'angle change, le ciel s'assombrit).