Professeurs : Michel Buffa & Frédéric Duvernay
SHUFFLE PACK CAFE
Youri Ginieys & Béatrice Frison
Il s'agit de réaliser une maquette illustrant certaines fonctionalités évoquées en cours et vues également en TP. Tout l'intérêt de ce mini-projet réside donc dans le choix de la réalisation. En effet, il est assez délicat de représenter l'ensemble des fonctionalité offerte par OpenGL en un seul programme.
Nous nous sommes donc tournés
vers un jeu de "Shuffle Pack Cafe".
Nous avons tout d'abord decide d'abandonner la possibilite d'utiliser des textures : Malgre des resultats visuels attrayants, la vitesse d'execution du jeu etait trop ralentie pour pouvoir se permettre un tel luxe.
Nous avons donc choisi d'utiliser des jeux de lumieres.
Les lumieres "ambient", "diffuse" ainsi que la positon de l'eclairage sont tout d'abord initialisees dans la fonction myinit(). Il s'agit d'un eclairage neutre ("ambient" en noir et "diffuse" en blanc), place du cote du joueur a droite et dirige en direction du centre de la table de jeu.
De plus, chaque objet se voit attribuer des lumieres "ambient", "specular", "diffuse" et "shininess" afin de definir pour chacun d'eux, une couleur, des parametres de reflexion de la lumiere...etc.
Nous avons egalement choisi de definir la table en tant que quadrillage (a l'aide de GL_LINE_STRIP) afin de rendre plus visible les effets de lumieres.
Voici donc les resultats que nous obtenons :
Pour rendre réaliste la réaction
de la balle aux impacts, on fait en sorte que le palet lui communique une
partie de sa vitesse avec des coefficients différents suivant qu'il
s'agisse de la normale ou de la tangente à la face qui subit la
collision (90% pour la normale et 25% pour la tangente).
On peut donc communiquer à
la balle différents effets (Accélération, ralentissement,
gauche, droite) suivant la vitesse de la raquette au moment de la frappe.
Différents problèmes
apparaissent qui sont dù au fait que le mouvement de la raquette
est géré indépendemment.
En effet, si la balle est lente,
ses positions aux instants t et t+1 sont proches; et si dans le meme temps,
on bouge la raquette vers l'avant pour intercepter et donner de la vitesse
à la balle, ces position peuvent être toutes les deux à
l'intérieur du palet; on ne détectera pas de collision. On
peut aussi avoir la position t à l'interieur de la raquette et la
position t+1 à l'extérieur, on detecte alors un impact avec
la mauvaise face de la raquette.
La correction de ces erreurs aux
cas par cas produit d'autres effets tout aussi indésirables.
Comme dit precedemment, dans
la version rendue (voir fichier.zip ci-dessous) subsistent encore quelques
erreurs en ce qui concerne la detection de collision. Corriger ces erreurs
auraient demande un modele beaucoup plus precis et une implementation multi-threading,
ce qui n'etait pas tout a fait le but de ce mini-projet. Nous avons donc
renonce a cette solution.
Nous desirions egalement dessiner le score directement sur la table de jeu. mais le manque de temps et les difficultes que nous avons rencontrees nous ont ramene sur le droit chemin.
Voici donc les sources de notre
version finale :