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

Signaler
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008
-
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
-
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

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
Messages postés
31
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
13 décembre 2003

...pourquoi?
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
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.
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
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;
}
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.
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.
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.
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
3
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 ?
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é!!
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 { }.