Sujets et
Corrections |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TD 1: Mini-langage TD 4: Les primitives graphiques en OpenGL TD 5: Les caméras en VRML et en OpenGL TD 6: Les lumières TD 7: Les lumières TD 8: Le remplissage TD 9: DEF, USE TD 10: Le traitement TP TP 1-2: Prise en mains des environnements de programmation VRML et OpenGL TP 5: Les matériaux TP 6: Le remplissage TP 7: Le placage TP 8: Chargement et
Dernière modification |
TD 1: Un mini-langage de description de scènes Exercice n°1 On se donne le mini-langage de description de scènes composé des instructions suivantes:
Programmer les scènes suivantes:
On se donne les opérateurs suivants:
Programmer les scènes suivantes:
Exercice n°2 Programmer la scène suivante: Un bras robot compose d'un avant-bras, d'un bras, et d'une paire de pinces. L'avant bras est articulé pour tourner autour de l'axe y d'un angle r1. Il s'agit d'un parallélépipède rectangle de dimension (3.0,1.0,1.0) (rouge). Le bras est articulé autour de l'axe y au bout de l'avant bras pour un angle r2. Il s'agit d'un parallélépipède rectangle de dimension (3.0,0.8,0.8) (vert). La pince est située au bout du bras. Elle peut tourner autour de l'axe du bras pour un angle r3. L'embase de la paire de pinces est un parallélépipède rectangle de dimension (0.6,1.2,1.8) (bleu). Chacune des mâchoires est un parallélépipède rectangle de dimension (1.0,1.2,0.4) (jaune) à même de se déplacer longitudinalement d'une valeur d pour réaliser une ouverture totale de 2xd.
TD 2: Implantation en VRML Exercice 1 Réaliser l'implantation VRML des scènes (1), (4), (5) et (6) de l'exercice 1 du TD 1. Exercice 2 Réaliser l'implantation VRML du robot de l'exercice 2 du TD 1. Exercice 3 Réaliser l'implantation VRML de la scène composée de 4 cubes de coté 1.0 et de 4 cylindres de hauteurs 4.0 et de rayon 0.2. Les quatre cubes sont centrés sur les positions (2.0, 2.0, 0.0), (2.0, -2.0, 0.0), (-2.0, 2.0, 0.0) et (-2.0, -2.0, 0.0). Les quatre cylindres sont respectivement centrés sur les positions (2.0, 0.0, 0.0), (-2.0, 0.0, 0.0), (0.0, 2.0, 0.0) et (0.0, -2.0, 0.0) et orientés selon les axes y, y, x et x. TD 3: Implantation en OpenGL Exercice 1 Réaliser l'implantation OpenGL des scènes (1) et (5) de l'exercice 1 du TD 1. Exercice 2 Réaliser l'implantation OpenGL de l'exercice 2 du TD 1. Exercice 3 Réaliser l'implantation OpenGL de l'exercice 3 du TD 1. Exercice 4 Soit la scène composée de quatre cubes de cotés 1 centrés sur les sommets d'un hexagone régulier de rayon 3 lui-même centré sur O et plongé dans le plan xOy. Les cubes doivent présenter une face directement orientée vers O. Réaliser l'implantation OpenGL de cette scène. TD 4: Les primitives graphiques en OpenGL Exercice 1 a) Ecrire une fonction de modélisation d'une boite parallélipipédique de dimension (tx,ty,tz). Cette fonction devra seulement assurer la création des facettes (boite rouge sur l'image proposée). b) Modifier la fonction précédente pour y inclure la gestion des normales aux facettes (utilisées pour les calculs d'éclairages) (boite bleue sur l'image proposée). Exercice 2 a) Ecrire une fonction de modélisation d'un cylindre de rayon r, de hauteur h, possédant sh sections en hauteur et sa secteurs sur sa base. Cette fonction devra seulement assurer la création des facettes (cylindre rouge sur l'image proposée). b) Modifier la fonction précédente pour y inclure la gestion des normales aux facettes (utilisées pour les calculs d'éclairages) (cylindre bleu sur l'image proposée). TD 5: Les caméras en VRML et en OpenGL Soit la scène constituée d'une sphère, d'un cube, d'un cylindre et d'un cône placés respectivement centrés sur les positions (-3, 3, 0), (3, 3, 0), (3, -3, 0) et (-3, -3, 0). (a) Écrire un fichier VRML visualisant en gros plan la scène selon un point de vue placé en position (0, 0, 20) visant l'origine: axe de visée (0,0,-1). (b) Écrire un fichier VRML visualisant en gros plan la scène selon un point de vue placé en position (20, 0, 0) visant l'origine: axe de visée (-1,0,0). (c) Écrire les fichiers VRML visualisant en gros plan la scène selon le point de vue (20, 0, 20): axe de visée (-1,0,-1). (d) Écrire un fichier VRML visualisant en gros plan la scène selon un point de vue placé en position (20, 20, 20) visant l'origine: axe de visée (-1,-1,-1).
(e) Reprendre la question précédente (position de l'observateur en (20, 20, 20)) en la programmant en OpenGL et C au lieu de VRML.
(f) Reprendre la question précédente en utilisant le gluLookAt pour placer la caméra de visualisation et conserver les verticales. Solutions
TD 6: Les lumières et matériaux en VRML Exercice 1 a) Ecrire une scène composée d'une sphère de rayon 5 centrée sur l'origine du repère et affectée d'un matériel avec uniquement de la diffusion dans le rouge. b) Modifier la scène précédente pour que le matériel intègre une réflexion spéculaire dans le vert. c) Modifier la scène précédente pour y intégrer un éclairage sous la forme d'une source lumineuse directionnelle blanche éclairant depuis la droite. d) Modifier la scène précédente pour y inclure une seconde sphère de rayon 2 placée en position (10, 0, 0) possédant le même matériel que la première ainsi qu'une seconde source lumineuse ponctuelle blanche placée à l'origine. e) Modifier la scène précédente pour y inclure une source lumineuse spot placée en position (0, 0, 10) orientée vers l'origine et éclairant partiellement la grosse sphère (éclipse à l'envers). Solutions
Exercice 2 Soient deux sphères de rayon 1, placées en position (5, 0, 0) et (-5, 0, 0) et blanches en diffusion. Soient deux sources lumineuses ponctuelles placées à l'origine du repère émettant dans le vert et dans le bleu. Construire la scène de telle manière que la sphère de droite soit éclairée uniquement par la lumière verte, et la sphère de gauche uniquement par la lumière bleue. Solution
TD 7: Les lumières et matériaux en OpenGL a) Ecrire une fonction initMaterial permettant l'initialisation OpenGL du matériel de l'exercice 1 du TD n°6. b) Ecrire une fonction initLights permettant l'initialisation OpenGL des lumières de l'exercice 1 du TD n°6.
c) Ecrire une fonction scène modélisant la scène de l'exercice 2 du TD n°6. TD 8: Le remplissage de polygones convexes et de zones de pixels Exercice 1: Remplissage de polygones convexes On souhaite effectuer le remplissage d'un polygone convexe défini dans un espace bitmap (à deux dimensions). Ce polygone possède un nombre arbitraire de sommets a) Définir une structure de données en langage C permettant le stockage informatique d'un tel polygone. b) Ecrire une fonction permettant de déterminer les indices des sommets les plus en haut (coordonnée y maximale) et en bas (coordonnée y minimale) d'un polygone. c) Ecrire une fonction réalisant l'affichage OpenGL des contours droit et gauche d'un polygone. Le contour droit est affiché en rouge. Le contour gauche est affiché en vert. Exercice 2: Remplissage d'une zone de pixel délimitée par une couleur On suppose disposer d'une structure de données (nommée bitmap) permettant de stocker une bitmap ainsi que de deux fonctions:
a) Ecrire une fonction remplissage1 permettant de remplir la bitmap b avec la couleur c à partir du pixel germe de coordonnées (x, y) avec comme couleur limite cl. b) Ecrire une fonction remplissage2 permettant de remplir la zone de pixels contigus de même couleur de la bitmap b avec la couleur c à partir du pixel germe de coordonnées (x, y). TD 9: DEF, USE, WWWInline et WWWAnchor en VRML Voir dans le cours l'utilisation de: Soit une scène composée de 4 parallélipipèdes rectangles disposés en 2x2 objets le tailles (3, 1, 1) et (1, 3, 3) placés en positions centrées sur (1.5, 0, 0) et (3.5, 0, 0) pour le premier couplet et (-1.5, 0, 0) et (-3.5, 0, 0) pour le deuxième couplet.
Soit la scène constituée de 16 sphères de rayon 3 placées régulièrement sur un cercle de rayon 20 centré sur l'origine et situé dans le plan xOy. Ces sphères sont ernativement rouges et bleues. Sur les sphères rouges, un liens hypertexte existe permettant d'atteindre http://iup3gmi.univ-fcomte.fr.
Solutions
TD 10: Traitement d'images, filtrage matriciel, filtrage spectral a) Définir une structure de données permettant de stocker une image bitmap RVB avec des composantes stockées sur un float (3 float par pixel). b) Définir une structure de données permettant de stocker un filtre bitmap carré de taille arbitraire. c) Ecrire une fonction de filtrage matriciel d'une image permettant de générer une nouvelle image. d) Tester les filtres moyenne, gradient et Laplace. TP 1-2: Prise en mains des environnements de programmation VRML et OpenGL Sous VRML:
Sous OpenGL:
Travail demandé:
TP 3: L'animation en OpenGL Exercice 1 Modéliser une animation au cours de laquelle un tore centré sur l'origine et orienté selon l'axe Oz tourne autour de l'axe Oy. Exercice 2 Modifier la scène précédente pour y gérer une fonction "stop and go" associée à la touche de clavier Espace (une frappe sur Espace interrompt l'animation, une nouvelle frappe la relance de la position d'arrêt, ...) Exercice 3 Modifier la scène précédente pour agrémenter l'animation d'un second mouvement consistant en une déformation cyclique selon l'axe x. Les 180 premiers degrés d'un tour déforme selon cet axe d'un rapport 1 à un rapport r. Les 180 degrés suivant ramènent la déformation du rapport r au rapport 1. TP 4: Les caméras en OpenGL (a) Implanter les question (e) et (f) du TD n°5 en plaçant la définition de la caméra dans le display. (b) Intégrer dans le programme une fonction reshape et déplacer dans cette fonction la définition de la caméra. (c) Remarquer les problèmes pouvant apparaître:
Résoudre ces problèmes via l'utilisation de glViewport et l'ajustement du repère virtuel associé à la fenêtre en fonction du ratio entre les dimensions en x et en y de la fenêtre. d) Tester les fonctions glFrustum et glOrtho pour définir une nouvelle caméra de visualisation en perspective et une caméra de visualisation en projection parallèle orthographique. TP 5: Les lumières et matériaux en OpenGL a) Programmer en OpenGL la dernière version de l'exercice 1 du TD n°6. b) Programmer en OpenGL l'exercice 2 du TD n°6. c) Soit une scène composée d'un assemblage de n3 sphères (n
>= 2) réparties en n plans de n lignes et n colonnes (structure cubique). Les sphères
ont pour rayon 1. Elles sont écartées de 5. Ces sphères sont uniquement diffusantes et
réflechissantes spéculairement. Les couleurs pour ces deux réflexions sont calculées
en fonction de la position de la sphère dans l'assemblage (rouge en x, vert en y, bleu en
z) linéairement entre 0.0 et 1.0 pour les deux sphères extrèmes. d) Tester le blending (transparence) en programmant une scène composée de 2 sphères transparentes de couleurs différentes animées d'un mouvement de rotation l'une autour de l'autre.
TP 6: Le remplissage de polygones a) Programmer en OpenGL l'exercice 1 du TD n°8. b) A partir de l'algorithme de Bresenham, programmer une fonction de calcul de l'abscisse du pixel le plus à droite de chaque trame où apparait le contour droit d'un polygone convexe. On pourra adapter l'algorithme pour qu'il remplisse une tableau d'abscisses indicé sur les ordonnées au lieu d'allumer des pixels. Tous les pixels sont calculés, mais une recherche de maximum permet de ne conserver que celui le plus à droite. c) Programmer une fonction de calcul de l'abscisse du pixel le plus à gauche de chaque trame où apparait le contour gauche d'un polygone convexe. d) Ecrire une fonction de remplissage d'un polygone convexe avec une couleur arbitraire. TP 7: Le placage de texture en VRML et en OpenGL Le placage de texture Exercice 1: Programmer une scène VRML avec affichage de 4 objets (une sphère, un cube, un cone, un cylindre) avec chacun une texture différente. Le but est de mettre en évidence les problèmes liès au texturage bitmap 2D lors du placage sur un objet 3D. Solutions Exercice 2: Ecrire un programme OpenGL affichant un carré de coté de taille 1.0 affecté d'une texture en damier 8x8 alternant des lignes à cellules successivement blanches et rouges et des lignes à cellules successivement vertes et bleues. Solution TP 8: Chargement et affichage d'une image en OpenGL, filtrage spectral Soient les deux images Image-500x200.raw et Image-350x233.raw. Ces deux images sont stockées au format RAW RGB entrelacé sur 1 octet par composante (3 octets par pixel). a) Ecrire un programme OpenGL permettant de charger ces deux fichiers images et de les afficher. b) Modifier le programme précédent pour afficher les images après un filtrage spectral permettant d'effectuer les opérations suivantes:
Solution
|