a) La création d'une roue dentée est réalisée par l'utilisation de 2 types de
primitives graphiques: un GL_TRIANGLES _FAN pour chacune des 2 faces d'une roue et des
GL_QUADS pour chacune des deux faces d'une dent. Il n'est pas possible d'utiliser des
GL_POLYGON pour générer en une seule fois chacune des faces car celles-ci ne sont pas
convexes. Il n'est pas possible d'utiliser un Gl_QUAD_STRIP pour les faces des dents car
il faut pouvoir spécifier une normale identique aux quatre sommets de chaque face de
chaque dent pour être certain de réaliser un ombrage plat. Quelle que soit la méthode utilisée, il faut éviter de modéliser des facettes dont on sait qu'elles seront dans la roue dentée et donc forcément invisibles. Il faut aussi éviter de modéliser deux fois la même surface sous peine d'obtenir un affichage aléatoire car l'élimination des parties cachées risque d'en être perturbée. b) Idées directrices de la phase de modélisation: a) Lorsqu'une texture doit être placée sur un objet, une opération
généralement nécessaire consiste à indiquer pour chaque sommet définissant l'objet,
la coordonnée correspondant dans la texture placée. Les coordonnées correspondant aux
points (pixels) de l'objet générés pendant la phase dessin sont calculées à partir de
ces coordonnées (généralement par interpolation). b) La fonction OpenGL à utiliser pour spécifier les coordonnées de
texturage est l'une des variantes de glTexCoord. Son prototype est glTexCoord{1234}{sifd}{v}(TYPE
coords);. Elle admet 1, 2, 3 ou 4 paramètres GLshort, GLint, GLfloat ou
GLdouble données en entête sous la forme d'une liste ou d'un tableau. Le nombre de
paramètres donnés devrait correspondre à la dimension de la texture (1D,2D ou 3D). Ces
paramètres peuvent être à valeur arbitraire mais OpenGL les rapportera à une valeur
comprise entre min et max soit par seuillage soit par modulo pour obtenir la véritable
coordonnée au sein de la texture. OpenGL propose aussi la possibilité de générer "automatiquement" les coordonnées de texture mais cette possibilité n'entre pas dans le cadre de cet exercice. c) Une surface paramétrique bicubique est une surface paramétrique
classique -> Il s'agit d'une surface dont l'équation paramétrique fait appel à deux
paramètres numériques s et t. En l'occurence, la définition classique d'une surface
bicubique stipule que s et t varient entre 0.0 et 1.0 qui sont justement les bornes de
l'intervalle dans lequel sont à définir les coordonnées de texture. a) Une courbe paramétrique cubique définie sur 4 sommets fait appel, en plus de ces quatre sommets, à une matrice de base de 4x4 coefficients numériques réels. Chaque position sera calculée à partir d'un paramètre réel t compris entre 0 et 1. La valeur de t pour la ième image est obtenu en divisant i par (n-1) en réel. La fonction demandée prendra donc en paramètre la valeur réelle t, la matrice de base et un tableau des 4 points de contrôle. Elle rend une position. b) La fonction demandée possède des paramètres d'entrée identiques à celle du a). En revanche, elle rend une direction. Pour calculer la tangente à une courbe paramétrique cublique, il suffit de dériver le vecteur (t3,t2,t,1) pour obtenir (3t2,2t,1,0) et à utiliser ce second vecteur en lieu et place du premier dans la formule de calcul de la courbe. c) La fonction reshape contient toutes les définitions de paramétrage de la caméra qui ne changent pas entre deux images. C'est à dire que la fonction reshape contiendra uniquement la définition du type de caméra et les paramètres associés. Elle ne contiendra pas le placement et l'orientation de la caméra. d) La fonction display contient la modélisation de la scène qui ne change pas entre deux images ainsi le placement et l'orientation de la caméra qui changent entre deux images. Pour cette opération, on utilise la fonction gluLookAt en lui passant en paramètre la position de la caméra, un point qu'elle regarde (position+tangente) et la direction de la verticale (0.0, 1.0, 0.0). |