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

  1. #1
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    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
    24 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 152
    Points : 176 986
    Points
    176 986
    Billets dans le blog
    46

    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
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    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
    24 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 152
    Points : 176 986
    Points
    176 986
    Billets dans le blog
    46

    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
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    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
    24 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : mai 2008
    Messages : 24 152
    Points : 176 986
    Points
    176 986
    Billets dans le blog
    46

    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
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    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
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    Par défaut

    ça donne cela avec beaucoup de chunks
    Nom : test.gif
Affichages : 32
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 : 30
Taille : 14,5 Ko

  9. #9
    Membre régulier Avatar de fifafou
    Homme Profil pro
    Collégien
    Inscrit en
    janvier 2016
    Messages
    155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 17
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : janvier 2016
    Messages : 155
    Points : 82
    Points
    82

    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.

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