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 :

Trier VBOs par material


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut Trier VBOs par material
    Salut à tous !

    Je suis en train de me développer un moteur 3D. Donc un moment il a fallu que je l'optimise. Alors pour sa j'ai l'intention d'utiliser les VBOs et après les IBOs. Mais voilà j'ai un problème. C'est pour les materials. Étant donné que je peux dessiner tous mes triangles en une seule commande avec :

    Je suis bloqué car il faut que pour chaque ou plusieurs triangle, j'attribue un material. Mais pas pour tous. Donc du coup je me retrouve dans l'obligation de trier mes triangles par material ou plutôt par couleur diffuse, ambiante, spéculaire, etc...

    Mais voilà, je n'arrive pas à trouver l'algorithme.

    Par ailleurs, je viens de trouver une alternative mais je suis réticent : Est-ce que c'est conseillé de mettre dans la mémoire du VBO, un vertex (contenant 3 coordonnées, 3 coordonnées de normales, 2 coordonnées de texture, 3*3 données de couleurs (RGB -> Ambiante; Diffuse; Spéculaire)) ? Sa ne fais pas un peu lourd pour chaque vertex ?

    Si sa vous intéresse mon code source est disponible sur mon git.

    Pouvez-vous m'aider S.V.P ?

    Merci d'avance...

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 173
    Billets dans le blog
    155
    Par défaut
    Bonjour,

    Pour faire votre tri de matériaux, si vous donner un identifiant pour chaque matériau, alors vous pouvez trier les identifiants (car ce sont des nombres).

    Pour la deuxième question, j'imagine que l'on s'organisera pour passer une texture au shader, afin de passer les couleurs des matériaux et donc, pour chaque vertex, on ajoutera un attribut pour le matériau. Dans un cas, où nous voulons encore plus de compression (soyons fous), on peut passer cette identifiant en 'w' d'une normale.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut
    Salut et déjà merci pour ta réponse.

    Citation Envoyé par LittleWhite Voir le message
    Pour faire votre tri de matériaux, si vous donner un identifiant pour chaque matériau, alors vous pouvez trier les identifiants (car ce sont des nombres).
    Donc j'ai un problème d'architecture: Je n'ai pas de MaterialManager. J'ai juste un membre Material dans chaque Triangle. Il serait plus judicieux de faire un MaterialManager qui contiendra la liste des materials et comme sa il n'y aura pas de duplication ?

    Mais du coup, pour afficher mes triangles, je vais devoir rassembler mes triangles par couleur ambiante pour faire un glMaterial() et un glDrawArrays(), puis par couleur diffuse pour faire la même chose et après pareil mais pour la couleur spéculaire ?

    Enfin c'est l'algorithme en lui-même que j'ai un peu de mal à concevoir...
    Je peux toujours le faire avec un tri à bulle mais c'est vachement lent et pas du tout optimisé et je suis sûr qu'il doit y avoir un moyen de faire autrement.

    Si sa peux aider à résoudre mon problème, voici mon git.

    Citation Envoyé par LittleWhite Voir le message
    Pour la deuxième question, j'imagine que l'on s'organisera pour passer une texture au shader, afin de passer les couleurs des matériaux et donc, pour chaque vertex, on ajoutera un attribut pour le matériau. Dans un cas, où nous voulons encore plus de compression (soyons fous), on peut passer cette identifiant en 'w' d'une normale.
    J'ai pas encore travaillé sur les Shaders, je sais simplement ce que c'est. Donc je vais laisser sa un peu de côté pour le moment. Sa a une importance dans mon problème ?

    PS : Détail qui peut avoir son importance : Je suis sur OpenGL 2.1.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 173
    Billets dans le blog
    155
    Par défaut
    Il vous faut un "Manager" (certains diront que les Manager sont le mal) pour pouvoir faire du tri et une gestion d'unicité de vos Material.

    Après, oui, vous aurez un Material pour chaque association différente de Diffuse / Ambient / Spécular. Mais en théorie, il n'y en a pas mille non plus.

    Pour les tris, autant utilisé le qsort() en C ou en std::sort() en C++

    Bon, courage, sans les shaders ...
    Les shaders sont obligatoires, pour la solution que j'ai expliqué, qui transfert les matériaux par la texture.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé Avatar de Nanos
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 109
    Par défaut
    Ah d'accord... Je viens de comprendre.

    Au départ pour gérer les couleurs, j'avais l'intention d'utiliser glMaterial(). C'est pour sa que vous disiez que c'est très difficile de faire sans les Shaders ? Car moi je voulais utiliser glMaterial() et après glDrawArrays() avec un certain nombre de vertex à dessiner pour chaque appel poue respecter la couleur.

    Donc le fait d'utiliser les Shaders, sa me simplifie bien la vie.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 173
    Billets dans le blog
    155
    Par défaut
    Le fait d'utiliser les shaders peut simplifier la vie. Mais il n'est pas impossible de le faire sans (juste avec les glMaterial).
    D'après moi, il n'était que de trier l'ordre d'affichage des objets afin de faire en sorte de faire le moins de changement de matériau possible.
    Une classe de base pour les matériaux pouvait être :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Material
    { 
    private: 
        Color ambiant; 
        Color diffuse; 
        Color specular; 
     
    public: 
        void apply(); 
    }

    Et dans la méthode apply() on retrouve les différent appel à OpenGL (glMaterial).

    Ainsi, chaque triangle / objet possède un Material (ou une référence vers celui ci) et utilise apply, lorsqu'il le doit.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. trier lignes par rapport a 1colonne excel
    Par coucoucmoi dans le forum Langage
    Réponses: 0
    Dernier message: 24/08/2009, 12h46
  2. trier couleur par rapport à une ligne selectionnée
    Par calvi2002 dans le forum Excel
    Réponses: 2
    Dernier message: 16/07/2009, 11h53
  3. [PHP 5.1] Trier fichiers par type apres les avoirs lister
    Par ketaaa dans le forum Langage
    Réponses: 4
    Dernier message: 28/05/2009, 22h47
  4. VBO et material
    Par zeyous dans le forum OpenGL
    Réponses: 9
    Dernier message: 26/09/2007, 13h39
  5. Un VBO par objet 3D ?
    Par Cooky dans le forum OpenGL
    Réponses: 5
    Dernier message: 23/08/2007, 23h22

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