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 :

Demande d'éclaircissement concernant les VAOs


Sujet :

OpenGL

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut Demande d'éclaircissement concernant les VAOs
    bonjour à tous,

    Dans le cadre d'un développement sur une appli de visualisation d'objet 3D, je me permet de laisser ce poste afin que vous éclairiez ma lanterne concernant un point spécifique d'openGL que j'ai encore du mal a me représenter :
    LES VAOs

    J'ai fait pas mal de recherche a ce sujet avant de poster ceci, mais je vous avoue que ça me parait vraiment abstrait.

    d'après le tuto a l'adresse suivante : https://tcuvelier.developpez.com/tut...0version%203).
    Un VAO est une manière de stocker des informations sur les objets dans la carte graphique, au lieu de lui envoyer des sommets au fur et à mesure des besoins.
    Mais n'est ce pas le but de la VBO?

    Ou alors est-ce les informations suivantes qui sont sauvegardé dedans (en plus des vbo) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     glVertexAttribPointer(PROGRAM_VERTEX_ATTRIBUTE, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
        glEnableVertexAttribArray(PROGRAM_VERTEX_ATTRIBUTE);
     
        glVertexAttribPointer(PROGRAM_TEXCOORD_ATTRIBUTE, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
        glEnableVertexAttribArray(PROGRAM_TEXCOORD_ATTRIBUTE);

    A ce moment là faut-il créée : 1 objet -> 1vbo -> 1vao ?

    Pourtant, j'ai lu également l'information suivante :
    Il s'agit des vertex array objects, un seul pouvant stocker plusieurs VBO. Grâce à cette fonctionnalité, on peut stocker les données des sommets et des couleurs dans des VBO différents, mais dans le même VAO.
    Comment faire pour utiliser plusieurs VBO en même temps?

    je ne pense pas être très loin de la réalité dans mes suppositions mais dans le doute je préfère demander.

    J'avais suivi des tutoriels il y a un certain temps sur openGL mais avec l'ancienne manière de faire. Il semble à présent que les VAO deviennent fortement recommander, du coup je préfère me mettre à jours.

    Je vous remercie d'avance pour vos réponses
    et vous souhaite de passer de bonnes fêtes de fins d'année

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 951
    Points : 221 233
    Points
    221 233
    Billets dans le blog
    129
    Par défaut
    Bonjour,

    Une autre explication qui pourrait vous aider : https://opengl.developpez.com/tutori...-triangle#L6-7
    De ce que je pense avoir compris, cela permet de sauvegarder (et donc de rappeler facilement) une utilisation donnée des VBO. Les VBO permettent de mettre les données des choses à affichées en mémoire GPU, mais cela n'indique pas nécessairement comment les afficher. Le VAO lui, explique comment lire les VBO en mémoire (comme le ferait les N paramètres du glDraw*), sauf que cette fois, l'utilisation est indiquée/conservée dans un objet.
    L'avantage, c'est qu'il suffit d'avoir qu'un unique glDraw, pour afficher tout est n'importe quoi (dans le sens, c'est le VAO actuellement actif qui indique comment lire les VBO).

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    Bonjour,

    tout d'abord merci d'avoir pris le temps de me répondre

    De ce que je pense avoir compris, cela permet de sauvegarder (et donc de rappeler facilement) une utilisation donnée des VBO. Les VBO permettent de mettre les données des choses à affichées en mémoire GPU, mais cela n'indique pas nécessairement comment les afficher. Le VAO lui, explique comment lire les VBO en mémoire (comme le ferait les N paramètres du glDraw*), sauf que cette fois, l'utilisation est indiquée/conservée dans un objet.
    L'avantage, c'est qu'il suffit d'avoir qu'un unique glDraw, pour afficher tout est n'importe quoi (dans le sens, c'est le VAO actuellement actif qui indique comment lire les VBO).
    Ok alors du coup ça confirme bien ce que j'avais cru comprendre.

    Merci

    Par contre (plus par curiosité), je ne comprend toujours pas comment utiliser plusieurs VBOs pour faire l'affichage d'un seul objet.

  4. #4
    Inactif  
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2022
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2022
    Messages : 62
    Points : 47
    Points
    47
    Par défaut
    Ces acronymes sont trompeurs, OpenGL raisonne pas en "objet" mais juste en procédural avec des tableaux de vecteurs. Une combinaison vertex/texture s'appelle un "batch".

    La notion d'objet c'est toi qui l'ajoute à ton programme, en général un "objet" est fait de plusieurs batches avec une matrice.

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    les acronymes sont trompeurs, OpenGL raisonne pas en "objet" mais juste en procédural avec des tableaux de vecteurs.
    En effet quand je dis objet, il s'agit pour mon cas de faces composés de vertex stockés dans un même vbo et affichés en un seul appel à glDraw... Mais en effet c'est peut être un abus de langage de ma part d'utiliser ce terme

    Une combinaison vertex/texture s'appelle un "batch".
    Mais la seule manière, que je connaisse à ce jour, de faire ce "batch", est de stocker au sein d'une même VBO vertex/normal/texture avec un décalage à faire pour lire chaque "composantes".
    Or dans l'article que j'ai mentionné lors de mon premier post, l'auteur semblait dire que l'on pouvait dissocier ces trois composantes en 3 VBOs distincts pour un même résultat. D'où ma curiosité scientifique

  6. #6
    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 : 43
    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 474
    Points
    11 474
    Billets dans le blog
    11
    Par défaut
    Citation Envoyé par flamme34 Voir le message
    Or dans l'article que j'ai mentionné lors de mon premier post, l'auteur semblait dire que l'on pouvait dissocier ces trois composantes en 3 VBOs distincts pour un même résultat. D'où ma curiosité scientifique
    C'est tout à fait possible de le faire, il suffit de ne pas oublier que le VAO enregistre aussi les appels à glBindBuffer.

  7. #7
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    En fait quand on a plusieurs VBOs position/normal/uv... on est tout simplement obligé d'en faire un supplémentaire, un VBO "index" qui va stocker pour chaque vertex les bons index de normal, etc... dont le mode de lecture sera aussi décrit dans le VAO.
    (Bon je sais plus comment, je l'ai jamais fait )

  8. #8
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Février 2011
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 266
    Points : 86
    Points
    86
    Par défaut
    Ok, je comprend mieux maintenant.

    Merci à tous pour vos réponses. Je met le post en résolu

    je vous souhaite encore de bonnes fêtes de fin d'année

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/02/2018, 11h13
  2. Réponses: 13
    Dernier message: 09/05/2011, 12h20
  3. Réponses: 4
    Dernier message: 20/06/2008, 15h03
  4. [JUnit] demande d'info concernant les differents tests en java.
    Par LESOLEIL dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 08/05/2006, 14h55

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