OpenGL et Glut: saisie clavier

bluelambda Messages postés 11 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 26 avril 2005 - 25 avril 2005 à 23:19
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 27 avril 2005 à 21:31
Salut à tous !



Voilà j'ai fait un petit programme qui utilise OpenGL avec GLUT.



C'est un programme très basique, avec juste une fonction d'affichage
opengl qui affiche quelques lignes, une fonction main, et une fonction
clavier définie par glutKeyboardFunc qui attend qu'on appuie sur ECHAP
pour quitter.



A un certain moment dans le programme, je lance une fonction. Peu importe où, ce n'est pas le prolème.

J'aimerai bien ajouter dans cette fonction un moment où elle demande à
l'utilisateur d'appuyer sur une touche, et tant qu'il ne le fait pas la
fonction attend.



En gros je voudrais faire pareil qu'avec un programme console quand on
utilise getch(), sauf que là je suis en OpenGL, et je recherche une
alternative à getch().



Je ne peux pas utiliser la fonction clavier définie par
glutKeyboardFunc, car celle-ci ne peut être activée uniquement si je
suis hors de la fonction. De plus elle ne peut être activée que par
Glut lui même car c'est lui qui lui transmet la touche pressée par
l'utilisateur. Alors que moi ce que je veux c'est récupérer la touche
pressée sans passer par la fonction clavier.



Donc, quelqu'un pourrait m'aider en m'expliquant comment demander une
saisie clavier à l'utilisateur au coeur d'une fonction en utilisant
GLUT ?

6 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
25 avril 2005 à 23:50
Le problème, c'est quoique tu fasses, glut va mémoriser la touche
pressée, car tu peux pas l'interrompre (enfin il me semble) autrement
que par un appel a exit(). Tes sur que il n'y a pas un autre moyen de
faire ce que tu veux ? Tu peux préciser ?
0
bluelambda Messages postés 11 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 26 avril 2005
26 avril 2005 à 00:02
Je vais expliquer par un exemple ;)



Imaginons que mon programme se lance normalement, la fonction d'affichage est exécutée et tout et tout, bref normal quoi.



A la fin de la fonction d'affichage, une fois que tout a été affiché
sur la scène, j'appelle une fonction appelée par exemple fonction_test.



Cette fonction va s'exécuter, et à un certain moment de son exécution,
l'utilisateur doit presser une touche pour que la fonction_test
poursuive son exécution.



Je ne sais pas comment faire cela. Comment récupérer des saisies clavier au milieu d'une fonction en cours d'exécution ?

Le top serait un truc un peu comme getch(), ou quelque chose comme ça.



Voici un petit shéma :



Fonction Affichage de Glut

affichage de la scène

lancement de fonction_test

Fin Fonction Affichage



fonction_test

actions diverses

question posée à l'utilisateur

attente d'une saisie clavier (<= le point qui nous intéresse)

actions diverses

fin fonction_test



Je ne peux pas me servir de la fonction clavier de Glut, car elle n'est
accessible que quand le programme est au repos (c'est à dire quand je
ne suis dans aucune fonction). Dans mon cas je suis dans la
fonction_test, en plein milieu, et tant que je n'en sors pas, la
fonction clavier de Glut ne peut être appelée.



J'ai été plus clair ou pas ? :P
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
26 avril 2005 à 10:57
Mais ta question posée a l'utilisateur, c'est affiché dans la fenetre openGL ? ou dans la console ?



"et tant que je n'en sors pas, la
fonction clavier de Glut ne peut être appelée." Faudrait tester.



Mais sinon je sais pas comment faire ca, jamais eu besoin. Mais j'ai du
mal a comprendre quand meme car, la question faut bien qu'elle
s'affiche dans la fenetre OpenGL donc faut qu'il appelle la fonction
d'affichage.
0
bluelambda Messages postés 11 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 26 avril 2005
26 avril 2005 à 12:42
J'ai donné cet exemple pour simplifier. La fonction en question est assez complexe, et elle ne demande rien à l'utilisateur, mais ne dois pas se poursuivre tant que celui-ci n'appuie pas sur une touche définie.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bluelambda Messages postés 11 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 26 avril 2005
26 avril 2005 à 19:37
Je vois que c'est pas clair :P

Bon en gros comment puis-je récupérer des saisies clavier sans avoir à
passer par la fonction clavier définie par GlutKeyboardFunc ? J'aimerai
faire un peu comme avec la fonction getch (on l'appelle, et elle met le
résultat dans une variable) sauf que là je suis pas en mode console.
0
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
27 avril 2005 à 21:31
Avec un thread ca pourrai marcher :

Voici un petit shéma :
static bool ok=false;

Fonction Affichage de Glut
affichage de la scène
Thread (lancement de fonction_test) // une seule fois !!!!!!
Fin Fonction Affichage

fonction_test
actions diverses
question posée à l'utilisateur
attente d'une saisie clavier (<= le point qui nous intéresse) -> if ( ok )
actions diverses
fin fonction_test

fonction keyboard de glut
...
case KEY : ok=true;
.....
fin fonction keyboard;

KeniiyK
0
Rejoignez-nous