Primitives OpenGL, dessin 2D, double buffer
Introduction
Pour cette partie, on partira du programme hello.c de
GLUT, auquel on ajoutera les fonctionnalités intercatives nécessaires.
-
Écrivez une routine disc(x,y,rayon) qui dessine un disque plein.
Quelle(s) primitives OpenGL peut-on utiliser ?
-
Écrivez un programme interactif qui dessine un disque dont le segment
du centre de la fenêtre à la position de la souris soit un
diamètre. Quand on bouge la souris, le disque doit la suivre.
-
Expérimentez le double buffer sur cet exemple. Gagne-t-on en vitesse
? En fluidité ? Expliquez.
-
Ajoutez la possibilité de dessiner plusieurs cercles suporposés
de couleurs différentes.
-
Dessinez une scène 2D présentant l'ensemble des primitives
OpenGL.
-
Dessinez un haricot. Une palette d'artiste (un planche avec un trou). Essayez
de les dessiner en utilisant un polygône OpenGL, puis tentez d'autres
solutions.
Remarque: la bibliothèque GLu permet de dessiner des polygônes
non convexes ou complexes par triangulation (cf. gluNewTess), nous verrons
son utilisation plus tard.
Dessin 3D, Z buffer, backface culling
Pour cette partie, on pourra utiliser le squelette et les fonctions de
manipulation de dino.c.
-
Dessinez un cube en fil de fer à base de GL_LINE_LOOP.
-
Idem pour un cube plein à base de GL_QUADS (pensez aux normales).
-
Dessinez-le avec et sans "backface culling", et avec et sans Z buffer (boutons
ON/OFF accessibles avec des touches du clavier). Le "culling" permet surtout
d'accélérer le rendu en éliminant certaines faces
cachées, dans quels cas permet-il d'éliminer
toutes
les faces cachées ?
-
Changez les valeurs near et far de gluPerspective de manière à
ce que les plans correspondants traversent le cube, observez. Pourquoi
ne met-on pas "far" le plus loin possible ? Essayez de grandes valeurs
(1000, 10000, ...) sur le dinosaure.
-
Dessinez et manipulez un quad non plan: (0,0,0), (0,1,0), (1,1,1), (1,0,0).
Commentaires ?
Dinosaure 2, le retour de Michael Jordan
-
Modifiez dino.c pour que l'animal bouge les bras de haut en bas en continu
(pas trop vite !). Utilisez glutIdleFunc().
-
Dessinez le sol sous le dinosaure, et une sphère de la taille d'un
ballon de basket dans une main du dinosaure dans le repère du
bras.
-
Lorsqu'on appuie sur espace, la balle doit tomber à la verticale
et rebondir sur le sol. Vous devrez calculer la position initiale de la
balle dans le repère du monde. Essayez de donner un mouvement réaliste
à la balle.
-
Comme le bras est en mouvement au moment du lacher, la balle doit en fait
avoir la vitesse initiale correspondante, et la trajectoire sera parabolique...
et oui, quand on fait de la 3D on doit aussi faire de la mécanique
!