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 :

Méthode de dessin (utilisation des buffers)


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Méthode de dessin (utilisation des buffers)
    Bonjour à tous,


    Dans mes données brutes, pour une géométrie on peut avoir plusieurs listes de triangles avec pour chacune d'entre elle la texture et le matériau à utiliser.

    Est-ce qu'il faut voir ces listes de triangles comme des "sous géométries" où chacune d'entre elle aurai ses données, ses buffers sa texture et son matériaux et le modèle se résumant qu'à une liste de géométrie ?

    Ou alors est-ce qu'il faut concaténer toutes les données et garder quelque part les différentes parties de cette géométrie pour l'affichage ?

    En gros, est-ce que je fais
    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
    32
    33
    34
    35
    36
    37
     
    class CSubset
    {
    public:
       void Draw();
    private:
       //Le buffer de vertex
       //Le buffer d'index
       //Le nombre de triangle
       //Le matériaux
       //La texture
       //La déclaration de vertex
    };
     
    CSubset::Draw()
    {
       //Positionnement du buffer de vertex
       //Positionnement du buffer d'index
       //Positionnement du matériau
       //Positionnement de la texture
       //Positionnement de la déclaration
       //Dessine de n triangles
    }
     
    class CModel
    {
    public:
        void Draw();
    private:
        std::vector<Subset> m_oSubsets;
    }
     
    CModel::Draw()
    {
        for each(Subset oSubset in m_oSubsets)
           oSubset.Draw();
    }
    ou

    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
    32
    33
    34
     
    class CSubset // Ou plutôt une structure
    {
    private:
       // La texure
       // Le matériaux
       // La déclaration
       // Le nombre de primitive
    }
     
    class CModel
    {
    public:
      void Draw();
    private:
      //Le buffer de vertex
      //Le buffer d'index
      std::vector<Subset> m_oSubsets;
    }
     
    CModel::Draw()
    {
        //Positionnement du buffer de vertex
        //Positionnement du buffer d'index
        unsigned long ulTriangleIt = 0;
        for each(Subset oSubset in m_oSubsets)
        {
           // Positionnement de la texture d'oSubset
           // Positionnement du matériaux d'oSubset
           // Positionnement de la déclaration d'oSubset
           //dessin de ulTriangleIt à oSubset.GetTriangleCount();
           ulTriangleIt += oSubset.GetTriangleCount();
        }
    }
    Je vous demande ça car j'ai jamais été confronté à avoir plusieurs matériaux ou un seul maillage.


    Merci beaucoup

    A bientôt

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    D'après la doc de directx, pour un vertex/index buffer statique, il faut tout mettre dans un unique buffer...

    Pour les buffers dynamiques:
    Ces buffers étant reconstruits généralement à chaque frame, on peut optimiser cela. On va généralement remplir un buffer, puis l'aficher, puis en remplir un autre, puis l'afficher... De cette façon, le CPU et le GPU travaille de manière optimale (si on utilisait un unique buffer, le CPU travaillerait seul lors du remplissage, puis le GPU seul lors de l'affichage).

    On va donc grouper les données par texture/shader/RenderStateautre, et les mettre dans des buffers séparés (de taille pas trop grande). Mais la taille ne doit pas non plus être trop petite, car à chaque fois que l'on change de buffer, le GPU va prendre un certain temps à mettre les choses en place.

    Je conseille donc (je rappelle que je parle des buffers dynamiques) de travailler avec plusieurs buffers. On groupe les données dans nos buffers selon leur texture par exemple. Une fois que nos buffers sont plein, on les affiche, on les vide et on peut recommencer à les remplir par d'autres données (dans la même frame).

    Par contre pour la taille et le nombre de buffers, il faut tester!!!!

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok, merci beaucoup,

    J'ai testé en séparant la géométrie dans des "Subsets" pour reprendre le terme de DirectX, et ça a l'air de fonctionner correctement


    Merci pour ta réponse,


    A bientôt

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

Discussions similaires

  1. Utilisation des méthodes de classe dans une autre classe
    Par ChriGoLioNaDor dans le forum C++
    Réponses: 4
    Dernier message: 28/07/2007, 15h10
  2. Utilisation des buffers
    Par Yoshidu62 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 30/05/2007, 19h51
  3. [C#]Méthode utilisant des arraylist
    Par Cyriusix dans le forum Accès aux données
    Réponses: 6
    Dernier message: 04/05/2007, 09h44
  4. [information] utiliser des "dessins" si le fichier image n'est pas trouvé
    Par TabrisLeFol dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/05/2006, 12h05
  5. Réponses: 1
    Dernier message: 09/03/2006, 18h15

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