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é
    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
    Expert éminent
    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é
    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 !!!

###raw>template_hook.ano_emploi###