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 :

[C++] Problèmes de performances en affichant des cubes [OpenGL 3.x]


Sujet :

OpenGL

  1. #21
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Sinon, tu peux passer par l'instantiation hardware (GL_ARB_draw_instanced)

  2. #22
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    J'ai fait quelques recherches, mais du mal à voir comment ça fonctionne concrètement.
    Finalement ça reviendrait (dans mon cas) à envoyer un seul cube, et plein de matrices de transformations pour chaque instance du cube, c'est ça ?
    Aurais-tu par hasard un bon article expliquant comment mettre en place une instanciation ?

  3. #23
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Tu trouveras ce qu'il faut ICI. (c'est en tout cas là que j'ai trouvé ce qu'il fallait pour mon moteur)

  4. #24
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Merci pour le lien, je vais regarder de plus près

    Mais je suis aussi tombé entre temps sur la méthode du geometry shader : j'envoie un point, et il ajoute des points pour créer le cube. Quels sont les avantages et inconvénients de cette technique par rapport à celle de l'instanciation ? Car j'ai l'impression que pour le geometry shader, ça pourrait prendre beaucoup moins de place en mémoire car encore moins d'infos envoyés au VBO, non ?

    Pour tester vite fait le geometry shader, j'ai fait quelque chose de simple : j'envoie X points, et je les transforme en triangle d'une certaine couleur. Seul souci : le geometry shader fait bien son job, mais par contre le fragment shader ne colorie pas les triangles, ils restent noirs. Voici les shaders :
    Vertex shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #version 330 compatibility
     
    in vec3 in_coordonneesSommets;
     
    void main()
    {
        gl_Position = vec4(in_coordonneesSommets, 1.0);
    }
    Geometry shader :
    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
    #version 330 compatibility
     
    layout (points) in;
    layout (triangle_strip, max_vertices = 3) out;
     
    uniform mat4 matriceAffichage;
     
    void main(void)
    {
        vec4 positionSommet = gl_in[0].gl_Position;
     
        gl_Position = matriceAffichage * positionSommet;
        EmitVertex();
     
        positionSommet.x += 1;
        gl_Position = matriceAffichage * positionSommet;
        EmitVertex();
     
        positionSommet.y += 1;
        gl_Position = matriceAffichage * positionSommet;
        EmitVertex();
     
        EndPrimitive();
    }
    Fragment shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #version 330 compatibility
     
    out vec4 out_couleurs;
     
    void main()
    {
        out_couleurs = vec4(0.2, 0.5, 0.7, 1);
    }
    Pourtant aucune erreur de compilation de shader, c'est assez étonnant.

    EDIT : problème résolu, ça venait de mon code compilant les shaders.

  5. #25
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Et donc tu y es arrivé en utilisant les geometry shader pour générer des cubes ?

  6. #26
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Finalement oui, et les performances sont bien meilleurs qu'avant.
    Merci en tout cas pour ton aide

  7. #27
    Invité
    Invité(e)
    Par défaut
    Je n'ai jamais utilisé de geometry shader, ça fait quoi, ça génère des sommets à partir de sommets existant ???

    Donc ca s'exécute avant le vertex shader ???

    Si j'ai bien compris tu envoie les matrices de transformations de tout tes cubes et tu génères les vertices des autres cube à partir d'un seul cube et les matrices de transformation, c'est bien ça ?

  8. #28
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 91
    Points : 65
    Points
    65
    Par défaut
    Le geometry shader est exécuté entre le vertex et le fragment shader, et permet de créer un grand nombre de formes à partir de la géométrie envoyée en entrée.

    Si j'ai bien compris tu envoie les matrices de transformations de tout tes cubes et tu génères les vertices des autres cube à partir d'un seul cube et les matrices de transformation, c'est bien ça ?
    Ça ce serait plus de l'instanciation je pense. Pour ma part, j'envoie un seul point (un triplet de coordonnées) ainsi qu'un float d'info (spécifique à mon utilisation) pour chaque cube, ces infos passent par le vertex shader, puis au geometry shader qui génère des triangles à partir de la coordonnée d'entrée, pour former le cube. Ensuite ça part au fragment shader.
    Pour les matrices de transformations, je ne préfère pas en envoyer pour chaque cube car je pense que c'est pas mal coûteux (une matrice 4*4 c'est quand même 16 float, alors que là j'en envoie que 4). Etant donné que mes cubes n'ont que la translation de différence, suffit d'ajouter quelque chose aux cordonnées du point envoyé pour faire la translation.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [2008R2] SSAS problème de connexion au traitement des cubes
    Par loosk dans le forum SSAS
    Réponses: 14
    Dernier message: 12/09/2020, 12h53
  2. [2008R2] Problème de connexion au traitement des cubes.
    Par toto9o dans le forum SSAS
    Réponses: 3
    Dernier message: 18/08/2011, 14h19
  3. Réponses: 3
    Dernier message: 29/08/2008, 09h49
  4. Problème de chargement des cubes Olap
    Par CoGnos8 dans le forum Cognos
    Réponses: 1
    Dernier message: 11/05/2008, 01h01
  5. [Performances]Afficher des mesures FPS
    Par GLDavid dans le forum Graphisme
    Réponses: 16
    Dernier message: 01/03/2006, 15h16

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