TD 3 : Projections OpenGL, field-of-view, virtual trackball

Résumé du TD

Le but du TD est de tester l'influence de l'angle de vue, tester les différentes projections (orthographique, perspective), tester la différence entre translation du point de vue et angle d'ouverture et développer une trackball virtuelle.

Instructions

Téléchargez et compilez le squelette de code fourni. Il affiche une théière, en perspective et en fil de fer, et contient les fonctions nécessaires pour l'interface utilisateur.

Field of View

Dans un premier temps, on va travailler l'angle d'ouverture de la caméra. Faites en sorte que quand l'utilisateur appuie sur le bouton du milieu de la souris, l'angle d'ouverture de la caméra change (en positif ou en négatif). Il fautpour celà utiliser la fonction motion et mesurer le déplacement depuis que l'utilisateur a commencé à appuyer (la différence entre currenty et starty).

Je vous propose d'ajouter le delta en y (distance parcourue verticalement sur l'écran) à l'angle d'ouverture.

Note :Si votre souris a une molette comme bouton du milieu, utilisez le bouton de droite.

Virtual trackball

On passe maintenant à la virtual trackball. Le but est de faire tourner la théière, comme si elle était portée par une boule.

L'axe et l'angle de la rotation sont définis par le début du parcours de la souris et sa position courante. Il vous faut :

Translation

Le prochain objectif est de faire que la scène se translate quand on utilise le bouton droit de la souris. À nouveau, le vecteur de translation est défini par la distance parcourue par la souris à l'écran.

Plusieurs transformations

Pour l'instant, votre trackball repart à zéro à chaque fois que vous recommencez à cliquer. Ca pose quelques problèmes en matière d'interface utilisateur...

Pour améliorer ça, il faut concaténer plusieurs transformations.

glGetFloatv(GL_MODELVIEW_MATRIX, matrix); vous permet de récupérer la transformation courante (dans la bonne pile de transformation).

glMultMatrixf(matrix); vous permet de rajouter cette transformation à la transformation que vous avez calculée.