Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

3D Python Discussion :

mainloop et keyboard ou mouse input [PyOpenGL].


Sujet :

3D Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 1 077
    Points : 1 740
    Points
    1 740
    Par défaut mainloop et keyboard ou mouse input [PyOpenGL].
    Salut les pythons multimédia 3D,

    Je bute sur le problème suivant dans ma quête de OpenGL dans l'implémentation pour python il existe des fonctions a enregistrer, comme callback, par les fonctions de GLUT (GL Utilities) qui permettent d'enregistrer un callback pour:

    -) l'affichage:

    glutDisplayFunc(display_func)

    -) La gestion des entrées clavier:

    glutKeyboardFunc(ascii_keyboard_keys_func)
    glutSpecialFunc(special_keys)

    -) La gestion des entrées souris:

    glutMouseFunc(mouse_func)

    Et le problème est que si j'enregistre une fonction d'affichage et que je fait défiler une animation ( En tournant dans une boucle while True : ) il m'est impossible d'avoir une interaction avec le clavier ou la souris étant données que la fonction d'affichage tourne en boucle infinis...

    Si il existe une autre manière de gérer les entrées comme par exemple dans chaque tours de boucle dans pygame:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    import pygame
    from pygame.locals import *
    from sys import exit
    pygame.init()
    screen=pygame.display.set_mode((800,600))
     
    while True :
     
      for event in pygame.event.get() :
        if event.type == QUIT :
          exit()
        if event.type == KEYDOWN :
          pass # Ici ont a la gestion du clavier.
     
      pygame.display.update()
    Je sais que PyOpenGL est implémentable comme viewport dans pygame pour ce problème mais si vous connaissez une autre solution que de passer par pygame simplement au cas ou ce n'est pas applicable ou simplement par curiosité, vous seriez très aimable de bien vouloir poster une réponse.

    Merci pour vos réponses éclairées illuminant mon ignorance.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Rédacteur/Modérateur

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : mars 2010
    Messages : 1 659
    Points : 8 149
    Points
    8 149
    Par défaut
    Salut Luke,

    Ta boucle while true est a mon avis une mauvaise solution. Personellement, je vois deux solutions possibles comme ça sur le moment:
    1 - Utilisation de thread
    2 - Utilisation d'une interruption regulière (ttes les 20 ms par exemple), ce qui partage le temps (un exemple: http://python.developpez.com/tutorie...n-bref/#LV-R-5)

    Sinon, je ne sait pas si quelques chose peux t'aider, mais j'ai un chapitre sur l'OpenGL dans mon bouquin: http://python.developpez.com/tutorie...bref/#LVII-B-4
    "La connaissance appartient à tout le monde" (Film Antitrust)

    Tout le nécessaire pour Python:
    *News/Accueil *Cours/tutoriels *FAQ
    *Forums *Outils dédiés *Mon espace personnel avec mes Articles, Cours et Tutoriels

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : juin 2010
    Messages : 1 077
    Points : 1 740
    Points
    1 740
    Par défaut
    Merci deusyss pour tes lumières,

    Tu a reconnus les fonctions de bases décrit dans ton livre, la solution était dans la question:

    utiliser un viewport avec pygame mais si ce n'est pas possible comme par exemple comme décrit dans ton bouquin l'interfaçage avec pygtk ???

    Concernant les Threads je sais fournir une target et passer des arguments a celle-çi mais après, après le lancement avec start() ou run() je ne sais pas par exemple si le threads s'exécute (en parallèle) je ne sais si l'on peut exécuter du code pendant son exécution au delà d'une d'un lancement threaded d'un procédure avec des arguments...?

    En faîtes le sujet de tâches parallèles est assez flous pour moi, concernant:

    -) Les threads

    -) subprocess.Popen(shell="/bin/bash/", stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
    car les autres fonctions de lancement de commandes (os.system, os.popen[2 | 3 | 4](), os.spawn[ l | p | e | v ]()) sont dites obsolètes ou conçus pour des taches spéciales que je ne connais pas.

    -) os.fork(). Engendrer un processus fils est le plus clair pour moi car je connaît les bases du C et Popen() et co fork() non ?

    Sinon je navigue un peu dans le flous concernant le sujet,

    par exemple récupérer chaque ligne de la stdout progressivement pendant une commande sur un gros dossier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ wipe -rcf /chemin/vers/gros dossier/
    tourne au cauchemar pour moi (j'ai essayer avec Popen().stdout.readline() ; Popen().stdout.next() ; )

    Brefs faire des cauchemars dans le flous n'est pas l'idéal lorsqu'on veut implémenter une Progressbar() avce pygtk pour un wrapper de wipe.

    Si vous connaissez de la documentation sur le sujet:
    -Liens vers de tutoriels, Livres, etc...
    Ou si vous avez des conseils, ils sont la bienvenue.

    Ca serai sympa de m'aider a y voir un peu plus clair sur le sujet qui est énoncer de manière flous (excusez moi).

    Merci pour vos réponses et votre aide.
    Bon python a vous.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

Discussions similaires

  1. Webview windows input type number keyboard problem
    Par jameson dans le forum Windows Phone
    Réponses: 2
    Dernier message: 05/08/2015, 14h10
  2. [Débutant] Quelque chose du style Keyboard Input
    Par timay83 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 13/03/2010, 19h54
  3. Ogre et OIS, Mouse et Keyboard Listener
    Par kiki1234 dans le forum Ogre
    Réponses: 2
    Dernier message: 18/11/2007, 14h50
  4. [FORMULAIRE] Récupération de input 'text'
    Par danael dans le forum Flash
    Réponses: 5
    Dernier message: 19/07/2003, 12h31
  5. mouse.cursorpos.y différent de ce que j'attends
    Par Guigui_ dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/11/2002, 22h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo