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 et MFC - Animation bloquée à 60FPS


Sujet :

OpenGL

  1. #1
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut OpenGL et MFC - Animation bloquée à 60FPS
    Bonjour,

    j'utilise un dialogue "modeless" MFC contenu dans un contrôle ActiveX pour afficher ma fenêtre OpenGL contenant une scène 3D.

    Jusque là, j'utilisais un timer pour animer ma scène. J'obtenais au max 60 FPS, ce qui me semblait en accord avec la résolution minimum des timer sous windows XP, qui est de 16ms.

    J'ai alors voulu changer de systeme d'animation, pour pouvoir dépasser les 60FPS.
    J'ai donc utilisé OnIdle (ou du moins une variante qui marche pour les CDialog, cf: http://www.codeproject.com/KB/dialog/idledialog.aspx). Ca marche, mais je suis toujours bloqué à 60FPS, et de plus l'animation s'arrête dès que mon curseur sort de la fenêtre...pas terrible.
    Mais quand même, retomber pile-poil sur 60FPS ca m'a semblé louche, alors j'ai testé avec une boucle d'animation "forcée" du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i = 0; i < 1000; i++)
    	Animate();
    Et je vous le donne en mille: de nouveau 60 FPS.
    J'ai alors pensé à mon programme calculant les FPS, mais que j'utilise FRAPS ou RivaTuner, même résultat.

    Donc voilà, il y a quelque chose qui me bloque à 60FPS et je ne sais pas d'où ca peut venir (pas de ma scène, j'ai fait les tests avec un simple cube). Si quelqu'un à une idée??

    Et tant qu'à faire, quelle méthode me conseillez-vous pour obenir l'animation la plus rapide possible sous MFC?
    - Timer?
    - Multimedia Timer (ont une résolution inférieure à 16ms, mais apparement c'est un peu plus lourd à gérer) ?
    - OnIdle ?

    Merci d'avance!

  2. #2
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    heuuu sauf erreur de ma part, ce n'est pas l'écran qui tourne à 60 Hz ? car dépasser les 60 fps j'ai jamais vu non plus... tu peux calculer à coup de timers combien tu en calcule (de frame) par seconde, mais combien tu en affiche c'est autre chose...

  3. #3
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Ouhlààà.... effectivement! désolé je devrais m'abstenir de poster en fin de journée

    Donc oui, je viens de tester en changeant mon ecran à 70Hz et j'obtiens 70FPS max (64 avec mes timer, ce qui confirme la limite de résolution dont je parlais avant) , merci Ange_blond!

    En fait j'avais programmé un compteur il y a quelques années, qui lui comptait bien les frames calculées, et c'est ce que je voulais obtenir en utilisant FRAPS ou RivaTuner. Mais evidemment ces programmes n'ont accès qu'aux frames effectivement affichées, ce qui les rend inutiles pour optimiser mon programme...

    Bref, je vais me reprogrammer un compteur, doit y avoir des exemples sur le forum.

    Sinon ma question sur la méthode d'animation la plus efficace reste valable, qu'utilisez-vous / conseillez-vous en général?

  4. #4
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    Hehe... disons que le classique 60Hz est facile à reperer...

    Pour programmer un compteur, il te suffit de faire un bete timer entre le début de chaque boucle de rendu... ça devrait pas poser de soucis...

    par contre pour le reste, n'utilisant pas MFC... je ne sais pas...

  5. #5
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Re, je viens de trouver ce qui clochait!

    En testant avec un compteur "interne" (j'ai récupéré celui donné en exemple sur NeHe), j'arrivais pile-poil au même résultat: 60 ou 70 FPS, comme l'ecran.

    J'ai donc verifié ma config et en forcant le Vertical Sync sur OFF, c'est bon!
    J'atteinds maintenant 500 FPS et quelques, que ca soit avec mon compteur interne ou en utilisant FRAPS.

    Du coup, oubliez ca, c'est complètement faux:
    c'est ce que je voulais obtenir en utilisant FRAPS ou RivaTuner. Mais evidemment ces programmes n'ont accès qu'aux frames effectivement affichées, ce qui les rend inutiles pour optimiser mon programme...
    Voilà, reste plus qu'à choisir entre IdleLoop et multimedia timers......

  6. #6
    Membre émérite
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Par défaut
    heuu en forçant le vertical sync sur OFF tu peux avoir des pb par la suite de rendu 3D je crois... j'ai déjà entendu parler de ça ici ou ailleurs...

    donc à utiliser avec précaution...

  7. #7
    Membre chevronné
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Par défaut
    Possible, sinon il n'y aurait pas d'intérêt à utiliser le VSync, mais perso je n'ai jamais eu à le laisser activé pour jouer correctement.

    Dans tous les cas, pour optimiser mon application il me faut bien le nombre total de FPS, donc je me passe du Vsync pour l'instant

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

Discussions similaires

  1. Appli MFC qui 'bloque' dans CWinThread::Run()
    Par vdaanen dans le forum MFC
    Réponses: 2
    Dernier message: 26/11/2011, 09h11
  2. OpenGL et MFC
    Par oliver_mpt dans le forum OpenGL
    Réponses: 0
    Dernier message: 20/02/2008, 15h43
  3. [MFC] Animation dans une vue
    Par Philippe320 dans le forum MFC
    Réponses: 11
    Dernier message: 06/10/2006, 16h22
  4. [FLASH] Animation bloquée
    Par charlotte10 dans le forum Flash
    Réponses: 7
    Dernier message: 04/10/2005, 10h09
  5. comment utiliser opengl et mfc
    Par ryma81 dans le forum OpenGL
    Réponses: 2
    Dernier message: 30/06/2005, 13h49

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