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 :

Programme trop lent


Sujet :

DirectX

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Programme trop lent
    Bonsoir.

    Je débute avec Directx et j'ai un petit problème.

    J'ai suivi les cours de ce site : http://www.directxtutorial.com/

    J'ai trouvé un modèle 3D de voiture sur le net, je l'ai converti au format .x avec PandaExporter et je l'utilise dans mon programme. Pour l'instant, la voiture tourne autour de l'axe Y.

    Tout fonctionne pour les petits modèles 3D, mais pas pour les autres (>20 000 vertices).

    J'ai mis en ligne le programme à cette adresse. Le jeu est dans le dossier "release", il y a aussi les fichiers source. Dans ce programme, la voiture fait à peine 20 000 vertices et pourtant, le programme est assez lent (images saccadées).

    Par exemple, sur 3D studio max, j'arrive à manipuler des objets > 500 000 vertices et dans la vue "perspective", il n'y a aucun bug (lorsque je déplace/zoom, il n'y a pas de bug, l'image suit "en temps réel"). Mais pourtant, quand j'inclus ce même modèle dans mon programme, chaque image met plusieurs secondes à s'afficher. Comment pourrais-je arranger ça? Est-ce que ça viendrait du programme? Du fichier .x?

  2. #2
    Membre confirmé

    Inscrit en
    Août 2007
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 300
    Points : 527
    Points
    527
    Par défaut
    Je n'ai pas pu lancer votre projet, qui est trop invasif (WS_EX_TOPMOST | WS_POPUP en forçant 640x480 est un peu méchant...). Par contre, j'ai jeté un coup d'oeil au code. Je vous suggère d'utiliser le flag D3DCREATE_HARDWARE_VERTEXPROCESSING lors de la création du device.
    "Maybe C++0x will inspire people to write tutorials emphasizing simple use, rather than just papers showing off cleverness." - Bjarne Stroustrup
    "Modern C++11 is not your daddy’s C++" - Herb Sutter

  3. #3
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    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 361
    Points : 20 387
    Points
    20 387
    Par défaut
    Citation Envoyé par subversa Voir le message
    Par exemple, sur 3D studio max, j'arrive à manipuler des objets > 500 000 vertices et dans la vue "perspective", il n'y a aucun bug (lorsque je déplace/zoom, il n'y a pas de bug, l'image suit "en temps réel"). Mais pourtant, quand j'inclus ce même modèle dans mon programme, chaque image met plusieurs secondes à s'afficher. Comment pourrais-je arranger ça? Est-ce que ça viendrait du programme? Du fichier .x?
    Oui mais pas de méprise les logiciels d'imagerie 3d comme 3dsmax dans leur prévisualisation temps réel en 3d s'arrangent toujours pour réduire le nombre ou optimiser de polygones à afficher.
    Dans 3ds Max un objet de 500000 sommets n'est pas réellement un objet avec autant de sommet affiché avec l'accélération matérielle ( en vue fil de fer ou wireframe oui évidemment ).
    La solution pour charger et afficher correctement le modèle 3d sous Direct X c'est de simplifier le nombre de polygones

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.

    J'ai donc corrigé quelques éléments de mon code que j'ai mis en ligne ici

    J'ai mis en ligne une vidéo de ce qui s'affichait à l'écran de mon PC lorsque j'exécute le programme :

    http://www.dailymotion.com/WireLink/video/12470236

    Surtout, on y voit que la vidéo était saccadée.

    J'ai utilisé le flag D3DCREATE_HARDWARE_VERTEXPROCESSING, j'ai augmenté la résolution et utilisé la fonction OptimizeInPlace(), et en effet, mon programme est maintenant bien plus rapide (la rotation des voitures s'effectue "en temps réel", mais disons que les 30FPS ne sont pas maintenus).

    Moi, ça ne me dérange pas d'avoir à réduire le nombre de polygones tant que l'objet affiché à l'écran reste à peu près identique (le résultat affiché dans les prévisualisations de 3D studio max est amplement suffisant).

    Puis, sur internet, je vois fréquemment, dans les caractéristiques de cartes graphiques, des choses comme "100 Millions de Vertices par seconde".
    Donc, est-il vraiment possible d'utiliser des modèles 3D si complexes dans des programmes? Et si oui, comment?

    En fait, mon but serait de faire un jeu vidéo. Et avec le terrain + quelques voitures + des personnages + quelques immeubles, on a vite atteint les 200-300k vertices (soit plus que les modèles que j'utilise dans mon programme). Et donc, j'aimerais bien savoir comment font les professionnels.

    Merci d'avance.

  5. #5
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par subversa Voir le message
    J'ai donc corrigé quelques éléments de mon code que j'ai mis en ligne ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          while ((GetTickCount() - starting_point) < 25);
    Ce code n'est pas très heureux..

    Déjà, tu fais une boucle d'attente active qui consomme du temps CPU inutilement (si tu n'as vraiment rien à faire tu pourrais lâcher du lest pour le multitâche/conso électrique).
    Ensuite tu fais un benchmark (enfin c'est le but de ton poste, non ?) et le seul moyen objectif de faire un benchmark réaliste est de rendre aussi rapidement que tu peux.. avec un code alternatif de production qui lâche un peu de lest si besoin est (SI tu es satisfait de la perf !).
    Enfin getTickCount() n'a probablement pas une résolution suffisante (getTickCount() a probablement une résolution de 15/30ms sur ta machine..).

    Tu peux réutiliser le code des tutoriaux du SDK comme base de code ("meshes tutorial") et déterminer la performance à partir de là ce qui sera probablement plus utile.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  6. #6
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par subversa Voir le message
    Puis, sur internet, je vois fréquemment, dans les caractéristiques de cartes graphiques, des choses comme "100 Millions de Vertices par seconde".
    Donc, est-il vraiment possible d'utiliser des modèles 3D si complexes dans des programmes? Et si oui, comment
    Oui c'est possible, mais ce sont des pics de perf, pas forcément applicable dans tous les cas (dépend de ton goulet d'étranglement !). Et ces chiffres concernent généralement les cartes haut de gamme. Les cartes style Intel intégré ne sont pas dans la même catégorie de perf malheureusement..

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  7. #7
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Points : 114
    Points
    114
    Par défaut
    Même si tu arrive à atteindre "100 Millions de Vertices par seconde" n’oublie pas que la taille de ta scène en vertices est égale à la (capacité de calcule de ta carte) par le (framerate), c’est à dire ici par exemple si tu veut un framerate de 50fps ta scène fera au maximum 2 million de vertices dans le meilleur des cas, c’est à dire sans doute aucun autre calcule.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci de votre aide.

    LeGreg, en effet, j'ai regardé les tutoriaux du SDK, et il y en a certains concernant les Mesh. Il y a aussi des codes assez intéressants, permettant d'afficher des Mesh. Il faudra que je les étudie. Merci et bonne soirée !

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/10/2013, 22h35
  2. Programme OpenGL trop lent..
    Par dridri85 dans le forum OpenGL
    Réponses: 8
    Dernier message: 07/07/2009, 14h28
  3. accélération programme trop lent
    Par djocin dans le forum Fortran
    Réponses: 6
    Dernier message: 01/07/2009, 12h30
  4. [SAGE] ODBC trop lent
    Par tileffeleauzed dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 14/11/2004, 09h56
  5. Envoi de mail trop lent
    Par MASSAKA dans le forum ASP
    Réponses: 3
    Dernier message: 15/10/2004, 10h57

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