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 :

les vao ne s'affichent pas tous


Sujet :

OpenGL

  1. #1
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut les vao ne s'affichent pas tous
    J'ai un programme qui doit afficher des parcelles de terrain(les chunks),mais elles ne s'affichent pas toutes
    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
    void Renderer::drawWorld(World& world,Camera& cam){
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        for (Chunk& chunk : world.chunkList)
        {
            glUseProgram(programID);
            glBindTexture(GL_TEXTURE_2D,texID);
            std::cout<<chunk.GetvaoID()<<std::endl;
            glBindVertexArray(chunk.GetvaoID());
            std::cout<<glGetError()<<std::endl;
            modelview = translate(cam.Getview(), vec3(chunk.GetposX(),0.0f ,chunk.GetposY()));
     
            glUniformMatrix4fv(glGetUniformLocation(programID, "modelview"), 1, GL_FALSE, value_ptr(modelview));
            glUniformMatrix4fv(glGetUniformLocation(programID, "projection"), 1, GL_FALSE, value_ptr(projection));
     
            glDrawArrays(GL_TRIANGLES, 0,chunk.vertices.size()/3);
            glBindTexture(GL_TEXTURE_2D, 0);
            glBindVertexArray(0);
            glUseProgram(0);
     
        }
    }
    grace au cout
    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
    1
    0
    2
    1282
    1
    0
    1
    0
    2
    1282
    1
    0
    2
    1282
    3
    1282
    4
    0
    1
    0
    on voit que j'ai une erreur au niveau de glBindVertexArray(chunk.GetvaoID()); et que parfois le meme vaoid est reutilisé

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Le 1282 ressemble à un code d'erreur (du style de ceux de glGetError(), même si je doute qu'il se retrouve ici). Faites-vous bien la vérification des erreurs OpenGL dans votre code ? (que ce soit par l'extension de débogage, ou par des glGetError()).
    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 régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    J'ai justement localisé l'erreur dans mon code avec des cout<<glgeterror, ce qui me donne la ligne 9 au niveau du glbindvertexarray
    Ce qu'il y a affiché dans la console est le vaoid puis le glgeterror pour chaque chunk,( il faut prendre deux par deux) j'ai laissé juste un tour de boucle pour voir clairement
    Le probleme est que l'erreur ne se produit pas a chaque fois et bizarrement le vaoid est le meme pour plusieurs vao

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    1282, c'est 502 en hexa. Cela correspond à GL_INVALID_OPERATION, qui, pour le cas, d'un glBindVertexArray correspond a un problème avec le tableau passé, notamment, à un problème pendant sa création/génération.
    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 régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    voila comment ils sont généré
    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
    void Chunk::SetVaoVbo(){
        size_t fsize=sizeof(GLfloat);
        glGenBuffers(1,&vboID);
        glBindBuffer(GL_ARRAY_BUFFER,vboID);
            glBufferData(GL_ARRAY_BUFFER,vertices.size()*fsize+coordTexture.size()*fsize,0,GL_STATIC_DRAW);
            glBufferSubData(GL_ARRAY_BUFFER,0,vertices.size()*fsize,vertices.data());
            glBufferSubData(GL_ARRAY_BUFFER,vertices.size()*fsize,coordTexture.size()*fsize,coordTexture.data());
        glBindBuffer(GL_ARRAY_BUFFER,0);
     
     
        if(glIsVertexArray(vaoID) == GL_TRUE)
            glDeleteVertexArrays(1, &vaoID);
     
        glGenVertexArrays(1,&vaoID);
        glBindVertexArray(vaoID);
            glBindBuffer(GL_ARRAY_BUFFER,vboID);
            glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0,BUFFER_OFFSET(0));
            glEnableVertexAttribArray(0);
            glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0,BUFFER_OFFSET(vertices.size()*fsize));
            glEnableVertexAttribArray(1);
            glBindBuffer(GL_ARRAY_BUFFER,0);
        glBindVertexArray(0);
    }

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Soit. Je pense (je conseille) d'ajouter les glGetError() pour chaque ligne de ce code.
    En réalité, li y a deux méthodes plus simples pour ce type de débogage : soit utiliser l'extension OpenGL prévue pour cela, soit utiliser un débogueur OpenGL.

    Peut être que dans le cas du troisième VAO vous avez des données invalides.
    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.

  7. #7
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    ce code est appelé avant la boucle principale et il n'y avait pas d'erreurs opengl jusque là

  8. #8
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    ça donne cela avec beaucoup de chunks
    Nom : test.gif
Affichages : 107
Taille : 90,0 Ko
    EDIT:j'ai trouvé un cube cassé sur chaque chunks,ça ma l'air d'etre des coordonné de texture qui ont été prises pour des vertices
    Nom : test2.gif
Affichages : 110
Taille : 14,5 Ko

  9. #9
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    j'ai fait différents tests,en fait le probleme est que quand je créé les vbo, il prend parfois une valeur déja existante,parfois il ne s'affiche pas.

  10. #10
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2016
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Seine Maritime (Haute Normandie)

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

    Informations forums :
    Inscription : Janvier 2016
    Messages : 173
    Points : 92
    Points
    92
    Par défaut
    Bon,finalement j'ai créé un vector de pointeur de chunks au lieu d'utiliser un vector normal avec emplace_back.
    C'est moins pratique mais ça marche.

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

Discussions similaires

  1. [AC-2003] Mon état n'affiche pas tous les enregistrements
    Par yael44 dans le forum IHM
    Réponses: 1
    Dernier message: 01/11/2009, 20h04
  2. Réponses: 17
    Dernier message: 17/07/2008, 23h32
  3. Tous les composants ne s'affichent pas dans un JPanel
    Par julie4207 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2008, 11h24
  4. Réponses: 1
    Dernier message: 26/10/2006, 17h44

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