TP numéro 4 : mouvements de caméra,
jouons avec les textures
Remarque
Ce TP contient la correction du TP 3.
Avant de commencer
-
Récupèrez l'archive complète de
ce TP, créez un nouveau projet avec VC++ et compilez les sources.
Regardez les nouvelles touches qui ont été mappées
et testez-les ('T', 'W', 'F', 'm', 'M', ...)
-
Regardez comment a été réalisée la correction
du TP précédent. Regardez en particulier comment on a effectué
le suivi des objets en mouvement depuis la position courante de la caméra.
La fonction...
/*---------------------------------------------------------------*/
void getObservateurPosition(GLfloat *x, GLfloat *y, GLfloat *z) {
/*---------------------------------------------------------------*/
/* Affiche la position de l'observateur dans le repère défini par la modelView */
double X,Y,Z;
glGetFloatv(GL_MODELVIEW_MATRIX, modelview);
/* position p du repere du monde par rapport a la camera */
X = modelview[12];
Y = modelview[13];
Z = modelview[14];
/* position de l'observateur dans le repere du monde. c'est la derniere ligne
de l'inverse de modelview. La derniere colonne de modelview est 0,0,0,1.
L'inverse d'une rotation est sa transposee. donc... */
*x = modelview[0] * -X + modelview[1] * -Y + modelview[2] * -Z;
*y = modelview[4] * -X + modelview[5] * -Y + modelview[6] * -Z;
*z = modelview[8] * -X + modelview[9] * -Y + modelview[10]* -Z;
}
... permet d'orienter la caméra depuis sa position courante sans
la déplacer, avec la fonction gluLookAt. Regardez donc la fonction
suitObjet(GLfloat *modelviewObjet){...}
qui l'utilise.
Testez-le !
-
Essayez les flèches de déplacement,
-
Essayez les flèches en maintenant la touche shift enfoncée,
-
Essayez la boule virtuelle en cliquant avec la souris et en la déplaçant,
-
Essayez les flèches une fois que la caméra a tourné
sur la boule virtuelle (si on re-clique, la boule se ré-initialise,
nous n'avons pas eu le temps de complètement terminer le mix entre
les déplacements caméra et la boule virtuelle, donc pas de
TP quake aujourd'hui encore!)
-
Essayez de déplacer le triangle et le cube. Pour déplacer
le cube, touches t,d,f,c et pour le triangle i,j,k et ','
Texturons !
-
Etudiez le source !
-
Regardez comment les textures sont chargées, les différents
modes de rendu des textures. Les "modes de chargement" de la texture TEXTURE_SOLID,
TEXTURE_ALPHA, etc... seront expliqués plus tard (ils vont nous
permettre d'anti-aliaser des polices bitmap, de faire des textures à
trous, etc...). La fonction à étudier est initTexture(...
-
Quel défaut vous voyez dans le programme proposé, concernant
les textures et le changement de mode (avec la touche 'M') ?
Travail à faire
-
Modifiez le code pour que l'on puisse modifier le nombre de fois où
une texture est répétée sur le sol.
-
Créez un cube 3D "à la main" (pas avec les fonctions glu
ou glut) en lieu et place du carré, et appliquez une texture différente
sur chaque face. Si votre cube ne possède pas des faces visibles
de l'intérieur, ous devrez penser à générer
correctement les normales à chaque face à l'aide de la fonction
glNormal3f(...). Une fonction
permettant de calculer un produit vectoriel se trouve dans le fichier trackball.c
-
Et ce bonhomme articulé dessiné avec des Display List openGL
???
-
Essayez donc d'utiliser la librairie glTexFont
qui permet l'affichage de polices de caractères bitmap texturées
en surimpression de votre programme OpenGL.