NOUVELLE VERSION DE "JEU DE LUMIÈRE" EN OPENGL

Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
- - Dernière réponse : cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
- 23 sept. 2005 à 00:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/11322-nouvelle-version-de-jeu-de-lumiere-en-opengl

cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1 -
magnifique!

J' ai trop kiffé la teillére !

par contre ché pas si c'est moi mais les mouvements par rapport a la souris sont pas la ou peu cohérents

@+
ROOT_DIEU
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
...pourquoi?
Maegis
Messages postés
101
Date d'inscription
vendredi 15 février 2002
Statut
Membre
Dernière intervention
6 août 2007
-
Une petite capture serait la bienvenue
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
Ok, j'ai compris la. Je vais voir ce que je peu y faire.
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
dsl, mais je ne connais pas la fonction mapping (je vient de l'apprednre grace a toi) et bon...bin patiente
gillig
Messages postés
32
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
4 décembre 2003
-
Je propose d'utiliser une table de correspondance touche->typeDeFigure, je trouve ça plus facile à lire (c'est plus concis), et aussi à faire évoluer :

- ajouter #include <string.h>
- ajouter une variable globale (puisque il y en a déjà...) : char mapping[256]; // 256=nb de valeurs possibles de l'unsigned char de la fonction Clavier

- dans l'init, ajouter l'initialisation de la table :
memset(mapping, 0, 256); // On remplit de zéros
mapping['w'] = 2; // correspondance touche -> type
mapping['s'] = 1;
mapping['x'] = 3;
mapping['d'] = 4;
mapping['c'] = 5;
mapping['f'] = 6;
mapping['v'] = 7;
mapping['g'] = 8;
mapping['b'] = 9;
mapping['h'] = 10;
mapping['n'] = 11;
mapping['j'] = 12;
etc...

- remplacer la fonction Clavier par :
void Clavier(unsigned char key, int x, int y)
{
if (key == 27) exit(0);

if (key == 'm') { z++; return; }
if (key == 'p') { z--; return; }

char res = mapping[key];
if (res) // on ne modifie le type que si la touche est dans la table
type = (int) res;
}
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
Voila, le code est changé, mais je n'est pas encore eu le temps de changer le zip.
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
Ok, je vais mettre 2 switch.
cs_Kaid
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006
-
Donc mettre deux switchs est la meilleure solution.
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
Pour aller plus vite il faut faire :
if
else if
else if
...
else

car si type = par exemple 7, il ne vaut pas 12, forcement, alors pourquoi faire le teste ?
Arkain
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003
-
Hum ok merci...mais bon, j'arrive plus a y voir clair quand c'est comme ça. Mais je peu changer le code si vous voulez. Quat au switch je n'y avait pas pensé!!
cs_Kirua
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
utilise plutôt un switch pour définir quel objet dessiner. Comme ceci:

switch(type)
{
case 2:
glutWireTeapot(1);
break;
case 1:
glutSolidTeapot(1);
break;

//......................

default:
//dessiner l'objet par défaut
}

ce sera qd même plus court. Aussi, sache que pr toutes les instructions du genre if, else, for, while, ..., s'il n'y a qu'une instruction dans le bloc, les parenthèses sont facultatives, donc tu aurais pu mettre ceci:

if(type == 2)
glutWireTeapot(1);
if(type == 1)
glutSolidTeapot(1);
if(type == 3)
glutWireSphere(1,50,50);
if(type == 4)
glutSolidSphere(1,50,50);
if(type == 5)
glutWireCube(1);
if(type == 6)
glutSolidCube(1);
if(type == 7)
glutWireCone(0.2,2,50,50);
if(type == 8)
glutSolidCone(0.2,2,50,50);
if(type == 9)
glutWireDodecahedron();
if(type == 10)
glutSolidDodecahedron();
if(type == 11)
glutWireOctahedron();
if(type == 12)
glutSolidOctahedron();

tu peux évidemment mettre la condition et l'instruction sur la même ligne ( if(condition) instruction; )

voilà, je pense que c bon à savoir pr la clarté du code. Attention, une fonction qui n'a qu'une seule instruction doit qd meme etre limitée par des { }.