Sujets et Corrections
de TD et TP

TD

TD 1: Mini-langage
de description
de scènes

TD 2: Implantation en VRML

TD 3: Implantation en OpenGL

TD 4: Les primitives graphiques en OpenGL

TD 5: Les caméras en VRML et en OpenGL

TD 6: Les lumières
et matériaux
en VRML

TD 7: Les lumières
et matériaux
en OpenGL

TD 8: Le remplissage
de polygones
et de zones
de pixels

TD 9:  DEF, USE
WWWInline et
WWWAnchor
en VRML

TD 10: Le traitement
d'images: filtrage
matriciel et filtrage
spectral

TP

TP 1-2: Prise en mains des environnements de programmation VRML et OpenGL

TP 3: L'animation en OpenGL

TP 4: Les caméras en OpenGL

TP 5: Les matériaux
et lumières
en OpenGL

TP 6: Le remplissage
de polygones

TP 7: Le placage
de texture en VRML et en OpenGL

TP 8: Chargement et
affichage d'une image en OpenGL
Filtrage spectral

 

RETOUR

 

Dernière modification
16/11/09 07:03:34

Travaux dirigés

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:

  • C pour le dessin d'un cube de coté 1, centré sur l'origine,

  • S pour le dessin d'une sphère de rayon 1, centré sur l'origine,

  • T(tx,ty,tz) pour réaliser une translation de vecteur (tx,ty,tz),

  • R(a,dx,dy,dz) pour réaliser une rotation d'angle a degrés autour de l'axe de vecteur directeur (dx,dy,dz) passant par l'origine,

  • Z(rx,ry,rz) pour réaliser un zoom de rapports rx, ry et rz selon les axes x, y et z par rapport à l'origine.

Programmer les scènes suivantes:

  • Scène (1): Quatre cubes de coté de longueur 1.0 aux positions (2.0,0.0,2.0), (2.0,0.0,-2.0), (-2.0,0.0,2.0) et (-2.0,0.0,-2.0).

  • Scène (2): Même scène que la scène (1), mais le cube en position (2.0,0.0,2.0) subit une rotation de 45° autour de l'axe y passant par son centre.

  • Scène (3): Même scène que la scène (2), mais le cube en position (2.0,0.0,-2.0) subit un zoom de rapport (1.0,1.0,2.0) par rapport à son centre.

  • Scène (4): Même scène que la scène (3), mais le cube en position (-2.0,0.0,-2.0) subit une rotation de 30° autour de l'axe y passant par son centre et un zoom de rapport (1.0,1.0,2.0) par rapport à son centre.

On se donne les opérateurs suivants:

  • Push pour réaliser l'empilement du repère courant,

  • Pop pour réaliser le dépilement du repère en haut de la pile vers le repère courant.

Programmer les scènes suivantes:

  • Scène (5): Même scène que la scène (4), mais on utilise les deux nouveaux opérateurs pour éviter des transformations géométriques ayant pour but d'en annuler une autre.

  • Scène (6): Même scène que la scène (4), mais on utilise les deux nouveaux opérateurs pour rendre les positions des objets indépendantes les une des autres.

Solution scène (1)

Solution scène (2)
Solution scène (3)
Solution scène (4)
Solution scène (5)
Solution scène (6)

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.

Solution

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.

Solution VRML scène (1)

Solution VRML scène (4)
Solution VRML scène (5)
Solution VRML scène (6)

Exercice 2

Réaliser l'implantation VRML du robot de l'exercice 2 du TD 1.

Solution robot VRML

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.

Solution VRML

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.

 

GLUt

Les quatre cubes

Le bras robot

Les quatre cylindres et quatre cubes

Les six cubes

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).

 

GLUt

Les boites parallèlipédiques par facettes

Les cylindres par facettes

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

 

VRML

Les fichiers VRML

 

GLUt

Le programme OpenGL

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

 

VRML

Les fichiers VRML

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

 

VRML

Le fichier VRML

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.

 

GLUt

Matériel et lumières en OpenGL

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.

 

GLUt

Détermination des contours droit et gauche d'un polygone convexe

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:

  • int getPixel(int x, int y, bitmap *b) pour obtenir la couleur du pixel de coordonnées (x, y) de la bitmap b,

  • void putPixel(int x, int y, int coul, bitmap *b) pour affecter le pixel de coordonnées (x,y) de la bitmap b avec la couleur coul.

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.

  • Ecrire un fichier VRML modélisant cette scène en utilisant les opérateurs DEF et USE.

  • Ecrire deux fichiers VRML modélisant cette scène en utilisant le WWWInline.

  • Modifier l'exercice précédent pour lier les deux parallélipipèdes extrèmes vers l'URL http://www.univ-fcomte.fr.

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.

  • Ecrire les fichiers VRML modélisant cette scène en utilisant le WWWInline.

Solutions

Le DEF et le USE de l'exercice 1
Le WWWInline de l'exercice 1
Le WWWAnchor de l'exercice 1
Les 16 sphères de l'exercice 2

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.

Travaux pratiques

TP 1-2: Prise en mains des environnements de programmation VRML et OpenGL

Sous VRML:

  • Un plugin Internet Explorer/Netscape Navigator (soit Cortona Player, soit Cosmo Player suivant les machines)

  • Une application de visualisation (Scene Viewer)

Sous OpenGL:

  • Visual C++ 6.0

Travail demandé:

  • Sous VRML: Implantation des fichiers VRML du TD 2.

  • Sous OpenGL:

    • Création d'un projet Visual C++ permettant la compilation OpenGL,

    • Téléchargement sur http://raphaello.univ-fcomte.fr d'un source exemple (BrasRobot.cpp) destiné à être compilé.

    • Implantation des exemples du TD 3.

    • Exercice supplémentaire:

      Soit la scène composée de huit cubes de cotés 1 centrés sur les sommets d'un cube de rayon 4 lui-même centré sur O, et de 12 cylindres de rayon 0.2 et de hauteur 4 joignant ces 8 sommets entre eux pour matérialiser les arêtes du cube de coté 4. Implanter cette scène.

 

GLUt

Les quatre cubes

Le bras robot

Les quatre cylindres et quatre cubes

Les six cubes

Les huit cubes et douze cylindres

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.

 

GLUt

L'animation en OpenGL

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:

  • écrasement de la scène lors des modifications de la taille de la fenêtre,

  • non utilisation de la totalité de la surface d'affichage possible.

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.
L'éclairage est réalisé par une lumière directionnelle animée pour effectuer une rotation autour le l'axe x.

 

GLUt

Un cube de sphères colorées

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.

 

GLUt

Deux sphères transparentes

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.

 

GLUt

Remplissage d'un polygone convexe

TP 7: Le placage de texture en VRML et en OpenGL

Le placage de texture
Application en VRML
Application en OpenGL

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

Textures en VRML

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

 

GLUt

Le texturage en OpenGL

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:

- négativation,

- augmentation de la luminosité,

- diminution de la luminosité,

- augmentation du contraste,

- diminution du contraste.

Solution

 

GLUt

Le filtrage spectral