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

DirectX Discussion :

Afficher des images sous directX


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Afficher des images sous directX
    Slt à tous,


    KKun pourrait-il m'aider la sur ce truc la svp ??

    En faisant les tutoriels du Gritche j'arrive à initialiser une résolution de 800x600x32, puis DirectDraw, et enfin une image...

    Mais moi ce que j'aimerais bien c'est faire défiler des images, ex :

    L'image 1 s'affiche
    On attends 5sec et la 2 s'affiche
    etc...

    Pour attendre j'utilise Sleep(5000) mais ça bloque tout lol, c po cool;


    Merci d'avance de votre aide ...
    http://www.earning.online.fr

  2. #2
    Candidat au Club
    Inscrit en
    Avril 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    tu recupere le temp en milliseconde entre chaque frame, pis une fois que ya les 5 secondes d'ecouler, tu passes a l'image suivante ^^.
    oro ?!

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 26
    Points : 19
    Points
    19
    Par défaut DirectX
    Ben voilà,


    c'est ça que je n'arrive pas : récup le temps en ms entre chaque frame ...

    :-(
    http://www.earning.online.fr

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu peux utiliser timeGetTime, GetTickCount, ou GetPerformanceCounter. Le dernier étant le + performant, mais si ça depasse la ms tu peux utiliser timeGetTime pour récupérer le temps en ms. Voilou

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    timeGetTime n'a pas une résolution de 1 ms. Il faut appeller d'auters fonctions pour méliorer la précision. La precision est variable et est proche de 5 ms. Le compteur de performance c'est QueryPerformanceCounter.

    Il ne suffit pas d'attendre que les 5 ms ce soient ecoulées. Pour ne pas paralyser la fenetre, il faut trairter les messages par GetMessage ou PeekMessage.

    Pour que ton application soit correcte il faut donc Traiter lesmessages, regarder si le temps est venu et pour ne pas bouffer tout le proc, faire un petit sleep(100), ou 100 est arbitraire.

    La structure adaptée a ton problème est d'utiliser les timers. M'enfin c'est un peu plus lourd a mettre en ouevre. Ils ont l'avantage d'envoyer des messages ce qui reveillera ton thread si tu utilises GetMessage. Ce qui simplifie la boucle des messages qui se contera de traiter les messages et de s'arreter à un message WM_TIMER.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 26
    Points : 19
    Points
    19
    Par défaut Cyber Lewis
    Slt,


    Merci pr la réponse,

    Mais est ce qu'il ya un code source exemple sur le net stp ???


    Je vois pas comment faire ce truc sinon ... (je suis hyper habitué à la prog séquentielle basic déjà lol genre basic)
    http://www.earning.online.fr

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Quel langage ? L'indispensable pour la programmation Windows et de se procurer le SDK Win 32. Sans ca, tu va avoir des problèmes.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Hmmm... je vois pas le rapport entre la prog windows et DDraw, surtout pour son probleme...

  9. #9
    mat.M
    Invité(e)
    Par défaut
    Je vois pas comment faire ce truc sinon ... (je suis hyper habitué à la prog séquentielle basic déjà lol genre basic)
    Comme l'au suggéré Blustuff il faut que tu comprennes les rudiments de la programmation win32.
    Pour réaliser la tempo tu peux utiliser les fonctions API citées précédemment après le traitement des messages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )
            {
               ..............................
                TranslateMessage(&msg);
                DispatchMessage(&msg);
           }
    	else
    {
    //afficher les images
    }


    Sinon utiliser l'événement WM_TIMER mais moins précis

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le traitement des messages windows c'est un peu le 1er truc qu'on apprend a mettre en place lorsqu'on commence a programmer un jeu en temps-réel (sous windows), il en aura besoin quoi qu'il fasse, mais je pense que par rapport au problème initial c'est un tout autre sujet.
    Vous compliquez un peu la tâche je trouve...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (timeGetTime() > FirstTime + 5000)
    {
        ChangeSprite();
        FirstTime = timeGetTime();
    }
    Pour moi c'est ce qu'il y a de + simple, pas la peine de l'embrouiller avec la prog Windows. Et s'il veut une resolution de moins de 5 ms, il peut utiliser GetPerformanceCounter().

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut
    Dis moi Loulou, porquoi Sleep(5000) paralyse l'application ? La difference entrre Sleep(5000) et ton code mis en boucle, c'est que ton code bouffe 100% du cpu. Ce qui est dommage pour une application qui doit afficher une image totue les 5 secondes... Relis la conversation precedente.

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Eh mais attend... Ou est-ce que ça bouffe 100% du CPU ?? Si c'est une appli DDraw il affichera pas une image toute les 5 secondes, ce sera du temps-réel (sinon pas la peine de faire ça avec DDraw...), donc une boucle infine pour afficher chaque frame... Apparemment il compte faire un jeu ou qq chose qui s'en rapproche, et personnellement j'ai jamais vu un jeu qui se refraichissait toutes les 5 secondes. Cela va de soi que ma methode ne marche que s'il a deja une boucle infinie pour gérer son appli

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Points : 696
    Points
    696
    Par défaut Re: Afficher des images sous directX
    Citation Envoyé par cyberlewis
    L'image 1 s'affiche
    On attends 5sec et la 2 s'affiche
    etc...
    Ne jamais faire de la programmation systematique. Cyberlewis veut afficher une image toutes les 5 secondes, et le faire avec DirectDraw, peu importe je ne vois pas là ce qu'il y a à reporcher. Quoiqu'il en soit, une telle application ne doit pas prende 100 % du cpu

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ben faut voir ce qu'il veut faire... S'il fait un jeu et qu'il cherche juste comment animer un sprite, la technique ne sera pas la même que s'il veut faire un screensaver style "slideshow" par exemple. Bon pis vu qu'il a pu l'air de trainer dans le coin, je crois qu'on le saura jamais

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    Hehe, loulou c le nom de mon chien de 6 mois ...



    Au fait, c'était pour un SleedShow ...

    lol
    http://www.earning.online.fr

  16. #16
    Membre actif Avatar de DeusXL
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 300
    Points : 272
    Points
    272
    Par défaut
    Je m'incruste surement mais le principe de la programmation DirectX n'est il pas une utilisation du Iddle time ? si il programme avec normalement cela va de soit quil va utiliser le cpu au maximum ... donc une boucle infinie a chaque rendu ... Si il veut faire un screensaver c'est dans le même genre, et je vois pas en quoi la boucle de rendu ou l'on vérifie si le temps écoulé est supérieur a la somme de l'ancient temps et de 5secondes ne peut etre utilisée Je ne comprend pas comment on peut faire de la prog Dx sans utiliser le iddle time ...

  17. #17
    mat.M
    Invité(e)
    Par défaut
    Je m'incruste surement mais le principe de la programmation DirectX n'est il pas une utilisation du Iddle time ?
    En général un jeu vidéo il vaut mieux lui allouer toutes les ressources nécessaires car c'est très gourmand en ressources

  18. #18
    Membre du Club Avatar de Freakazoid
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 116
    Points : 65
    Points
    65
    Par défaut
    Je me permet de me taper l'incrust. aussi mais j'ai aussi l'impression que vous compliquez le problème. Un simple GetTimeCount suffit ici.
    Pour un slide show pas besoin d'avoir une precision de malade.
    Perso j'avais la moitier de mon jeu en Direct Draw avec ce type de compteur pour le temps et je n'avais pas trop de problèmes meme si c'etait pas super precis.
    Le problème de perf. viendra peut etre de DirectDraw et encore pour afficher une image toute les 5 secondes il devrait suporter.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/03/2011, 13h56
  2. Affiche des images sous Safari
    Par Identifiant dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 04/03/2009, 14h54
  3. [SVG] Afficher des images jpeg dans un rectangle sous firefox
    Par Spiderben dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 02/08/2007, 11h10
  4. [SVG] Affiché des images dans un rectangle sous firefox
    Par Spiderben dans le forum Firefox
    Réponses: 0
    Dernier message: 31/07/2007, 22h45
  5. [TP][MULTI-PROBLEME]Comment afficher des images pcx
    Par mikoeur dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 24/10/2002, 13h57

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