Examen de TD n°1 2004-2005

RETOUR

17 novembre 2004 - 1h25

Les documents ne sont pas autorisés.

On n'oubliera pas de fournir quelques explications sur les techniques employées.

Question 1: Modélisation par facettes en OpenGL

Ecrire une fonction OpenGL modélisant par facettes une sphère de rayon 1 centrée sur l'origine. Cette fonction prendra comme paramètre un niveau de facettisation à valeur entière. Elle devra assurer, la génération des facettes, la génération des normales nécessaires aux calculs d'éclairage, ainsi que la génération des coordonnées nécessaires à un placage de texture.

Equation paramétrique de la sphère :

t appartient à [-p/2,p/2]
u appartient à [0,2p]
EquationParametriqueSphereEspace.gif (1062 octets)

Correction

Question 2: Algorithmique de l'infographie

La version simplifiée de l'algorithme de Bresenham pour le tracé de segments de droite sur écran raster est la suivante:

void ligne(int xi,int yi,int xf,int yf) {
  int dx,dy,cumul,x,y ;
  x = xi ;
  y = yi ;
  dx = xf - xi ;
  dy = yf - yi ;
  allume_pixel(x,y) ;
  cumul = dx / 2 ;
  for ( x = xi+1 ; x <= xf ; x++ ) {
    cumul += dy ;
    if (cumul >= dx) {
      cumul -= dx ;
      y += 1 ; }
    allume_pixel(x,y) ; }
}

Adapter cette version pour qu'elle fonctionne sans condition sur xi, xf, yi et yf.

Correction

Question 3: Caméras en VRML

Le nœud VRML permettant de définir une caméra de visualisation en perspective est le suivant:

PerspectiveCamera {                    # valeurs par defaut
position            px py pz           # 0 0 1
orientation         dx dy dz angle     # 0 0 1 0
focalDistance       fd                 # 5
heightAngle         ouverture          # 0.78 (p/4)
}

On considère une scène centrée sur l'origine du repère et occupant un volume approximativement sphérique de rayon 10.

Définir les nœuds caméra que vous utiliseriez pour visualiser cette scène en perspective en gros plan dans la fenêtre d'un viewer VRML selon les points de vue suivants:

  • 0.0 en x, 100.0 en y, 0.0 en z (du haut)
  • 200.0 en x, 200.0 en y, 0.0 en z (depuis en haut à droite)

Correction

Question 4: Animation en OpenGL

On souhaite programmer une scène animée en C + OpenGL + GLUT. Cette scène est constituée d'une unique sphère de rayon 1 qui parcourt cycliquement à vitesse constante une trajectoire carrée de coté 5 centrée sur l'origine et décrite dans le plan xOy. Un tour complet est réalisé en n images (n quelconque pas obligatoirement multiple de 4).

  1. Ecrire la fonction idle réalisant cette animation.
  2. Ecrire la fonction display dessinant cette scène.

Correction

Rappel de quelques fonctions OpenGL ([] indique des fonctions à suffixe)

  • glBegin(…): Définition d'une primitive graphique (paramètre à choisir parmi GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_POLYGON, GL_QUADS, GL_QUAD_STRIP, GL_TRIANGLES, GL_TRIANGLE_STRIP ou GL_TRIANGLE_FAN)
  • glClear(…): Effacement des tampons de dessin
  • glNormal[](…): Définition d'une normale
  • glPopMatrix(…): Dépilement de la transformation géométrique courante
  • glPushMatrix(…): Empilement de la transformation géométrique courante
  • glRotate[](…): Définition d'une rotation
  • glScale[](…): Définition d'un zoom
  • glTexCoord[](…): Définition d'une coordonnée de texturage
  • glTranslate[](…): Définition d'une translation
  • glVertex[](…): Définition d'un sommet

Remarques, erreurs
nicolas.janey@univ-fcomte.fr