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

cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008 - 1 sept. 2003 à 20:19
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
23 sept. 2005 à 00:25
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
23 sept. 2003 à 02:48
...pourquoi?
Maegis Messages postés 101 Date d'inscription vendredi 15 février 2002 Statut Membre Dernière intervention 6 août 2007
16 sept. 2003 à 18:36
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
7 sept. 2003 à 06:23
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
2 sept. 2003 à 21:09
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
2 sept. 2003 à 18:56
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
2 sept. 2003 à 01:11
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
2 sept. 2003 à 00:46
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 1
1 sept. 2003 à 22:53
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 4
1 sept. 2003 à 22:52
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
1 sept. 2003 à 20:33
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
1 sept. 2003 à 20:19
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 { }.