IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

OpenGL Discussion :

[OpenGL/FREEGLUT C++] Problème de flickering quand je clique sur un objet


Sujet :

OpenGL

  1. #1
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut [OpenGL/FREEGLUT C++] Problème de flickering quand je clique sur un objet
    Bonjour,

    En résumé, j'ai fait une petite librairie pour pouvoir afficher rapidement des objets basiques (sphère, cube, ...) et encapsuler toutes les routines d'OpenGL/GLUT.
    Au final, j'ai une simple classe GLScene qui contient et gère tous les objets (un peu comme TGLScene de Delphi).
    Il suffit donc de dériver de cette classe pour créer n'importe quelle scène.

    Mais j'ai un problème de flickering quand je clique sur un objet dans certaines conditions :
    - quand je fais bouger la scène et que je clique sur un objet, pas de problème
    - quand je fais un zoom puis je clique sur un objet, j'ai l'avant dernière scène qui s'affiche brièvement.
    C'est probablement un problème de buffer, mais impossible de trouver où ça foire.

    J'ai fait un projet exemple pour reproduire le problème.
    Pour tester, suffit de compiler l'archive jointe avec juste freeglut comme librairie.
    Le main se trouve dans le fichier Simple.cpp

    Si une bonne âme peut me trouver la solution ce serait cool
    Lionel
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    juste une question glutPostRedisplay est-ce vraiment utile d'appeler cette fonction ?
    Sinon j'apprécie le code il peut être très utile.
    Est-il prévu de charger des objets Wavefront obj par exemple ?
    En tout cas c'est bien parti, nous faire signe de l'avancement

  3. #3
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut
    Ok, j'ai fini par trouver, un glutSwapBuffers de trop !!
    Fichiers attachés Fichiers attachés

  4. #4
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut
    Pour simplifier, j'ai mis les sources sur GitHub.

  5. #5
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    merci pour le code il me sera utile .
    J'ai regardé vite fait y-a-t-il un moyen de charger un fichier d'objet 3d par exemple au format Wavefront obj et créer un mesh 3d ?

  6. #6
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Alors je déconseille FreeGLUT , c'ette lib est une vrai horreur.
    Et pas faute de vouloir la testé ,j'ai même fait un jeu en 3D avec (y'a 9 ans ) :




    Le résultat était sans appel , ça alourdit le code inutilement , et ça m'oblige de mettre des variables globales...
    Du coup depuis j'utilise SDL (ou SFML ou GLFW).

    Après je vais être honnête, ton code est complètement obsolète, de OpenGL 1.2 en 2022 ?! ^^'
    Et en plus tu semble utiliser glu...

    Du coup pour moi OpenGL 1.2 + glu, c'est mort
    Il faut au moins du OpenGL 3 ou du OpenGL ES 2 ou 3.

  7. #7
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut
    Mon code est peut-être complètement obsolète mais il fait parfaitement ce dont j'ai besoin !
    Maintenant, si tu proposes un framework aussi simple que le mien en plus moderne, je suis tout à fait preneur.
    Ou se trouve ton git qu'on puisse récupérer le code ?

  8. #8
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Alors aucun idée s'il existe de tel framework , sur github je trouve rapidement ceci :
    https://github.com/edap/ofxBranchesPrimitive

    Sinon mon jeux n'est pas sur Github ,vu qu'il date de 10 ans ,et avant github n'était pas connu
    Sinon j'ai un github : https://github.com/Kannagi

    Et le seul qui se base sur la 3D est celui là : https://github.com/Kannagi/LMP3D
    Il vise des vielles machine (pour cela que tu trouvera un peu de code de GL1.2) , mais il n'utilise pas glu , ni de pushmatrix/popmatrix , ni de glrotatef (et compagnie), ni de glbegin/glend etc etc , bref toute les fonctions qu'il ne faut pas utiliser.
    Je compter l'upgrade un jour au moins sur OpenGL 2 ou 3 pour pouvoir avoir de l'éclairage / ombre.
    Mais comme je dois le programmer en assembleur sur les différentes consoles, je pense que je ne le ferais probablement jamais (en asm et la conversion en OGL 2 ou 3).

    J'avais écrit les fonctions que j'utilise en GL1:
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    //init/config
    glEnable/glDisable
     
    glClearColor
    glClear
     
    glAlphaFunc
    glBlendFunc
     
    glCullFace/glFrontFace
     
     
    //texture
    glBindTexture
    glGenTextures
    glTexParameteri
    glDeleteTextures
     
    //Matrice
    glMatrixMode
    glLoadMatrixf
     
    //Draw
    glEnableClientState
    glDisableClientState
    glVertexPointer
    glTexCoordPointer
     
    glDrawArrays
    glDrawElements
    Sur ce code, si on passe sur du GL3 ou ES2 , il n'y a que l'affichage et les matrix à changer.

    J'avais "commencé" un moteur 3D en utilisant OGL3 , mais ensuite , j'ai décidé de faire un moteur "rétro" qui ne vise que des vielle config PC ou des consoles (sur les vielles consoles c'est de l'asm et du C bare metal).

  9. #9
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut
    Le truc, c'est que la 3D n'est absolument pas la partie principale de mon programme. Je fais des simulations numériques (genre spin dans un champ magnétique) et j'avais envi d'avoir une représentation 3D du résultat. Donc globalement, j'ai besoin d'élément basique (sphère, cube, flèche, réseau, ...) que je puisse facilement positionner et orienter.
    Niveau texture, juste des couleurs basiques (d'ailleurs, je ne comprend rien aux textures ! ).
    J'ai donc besoin d'un framework très simple (le programme demo Simple.cpp le montre bien, comme celui avec les wxWidgets).
    J'ai juste quelques soucis avec la gestion du clavier car je n'utilise pas toujours glutMainLoop pour ne pas solliciter le processeur inutilement quand la 3D ne tourne pas. Egalement un souci car je ne peux pas ouvrir 2 fenêtres 3D, mais c'est pas grave.
    Note : mon code doit aussi être compatible Windows/Linux.

  10. #10
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    Citation Envoyé par lirey Voir le message
    J'ai juste quelques soucis avec la gestion du clavier car je n'utilise pas toujours glutMainLoop pour ne pas solliciter le processeur inutilement quand la 3D ne tourne pas. Egalement un souci car je ne peux pas ouvrir 2 fenêtres 3D, mais c'est pas grave.
    Tu peux tres bien daire un sleep , c'est ce que je faisais sur mon jeu en 3D (du coup il doit prendre que quelque % de CPU).
    Mais la gestion clavier est une horreur sur glut , pour cela que je ne l'ai plus réutilisé.

  11. #11
    Membre averti
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Par défaut
    Non un sleep ça ne va pas car la fenêtre doit rester "responsive" et je dois pouvoir continuer mes calculs par ailleurs.
    Ce qu'il faudrait, c'est que je fasse un thread séparé pour la fenêtre 3D.
    Mais bon, pour le moment ça marche, faut juste pas trop en demander

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/02/2013, 23h05
  2. Réponses: 1
    Dernier message: 02/03/2008, 21h34
  3. Afficher une TextArea quand on clique sur un bouton
    Par Goozisan dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 26/11/2006, 20h44
  4. [Forum] Envoyer une variable quand on clique sur un lien
    Par Eisy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 34
    Dernier message: 17/03/2006, 12h05
  5. Insérer un code quand on clique sur un smiles
    Par Blade dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/12/2004, 01h10

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