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 :

Polygones parasites ..


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut Polygones parasites ..
    Bonjour,
    je suis en train de coder un petit moteur de voxel, je viens de finir la génération procédurale du monde et je viens de m'apercevoir que j'ai un bug ...

    Quand je me déplace le monde se génère automatiquement et à un moment ya des trucs bizarres qui s'affichent ...

    une petite vidéo ça parle plus (désolé ya une petite musique j'étais en train d'écouter et je savais pas que fraps recordais l'image ET le son ... ):
    [ame="http://www.youtube.com/watch?v=WoxPd72u6aM"]javaw 2013 08 30 17 32 09 43 - YouTube[/ame]


    Je ne sais pas d'où ça vient, je ne fais que/' dé/afficher des faces de cubes, on dirait que des vertices ont la même origine ... le problème c'est qu'elles semblent loin (je commence à générer en 160000,160000) ...

    J'utilise lwjgl et les vbo :
    - du coup je me dis c'est peut être quand je détruis les vbo je fais ça je sais pas si c'est bon : GL15.glDeleteBuffers(vertex_buffer_id[i]);


    edit :

    pour charger mes vbo je fais :

    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id[0][i]);
    GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer_data, GL15.GL_STATIC_DRAW);//GL_DYNAMIC_DRAW GL_STATIC_DRAW
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
    pour afficher :
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id[j][i]);
    GL11.glVertexPointer(3, GL11.GL_FLOAT, 40, 0);
    GL11.glNormalPointer(GL11.GL_FLOAT, 40, 12);
    GL11.glColorPointer(4, GL11.GL_FLOAT, 40, 24);
    GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 6*nb[j][i]);
    GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);



    dans la vidéo le problème c'est que ya des vertices qui ont pour origine 0,0 alors que je commence à générer en 160000,160000 donc pourquoi j'ai des vertices affichées en 0,0 c'est pas normal, les coordonnées que je donne à mes cubes sont bonnes j'en suis sur et certain, je n'en génère pas en 0,0

  2. #2
    Inactif
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    Bon j'ai un tableau de vbo par chunk (un objet bref j'en ai 441 en tout), vertex_buffer_id de taille [6][16], 6 pour le nombre de faces (6 dans un carré ) et 16 car je divise mon chunk en 16 parties pour mieux pouvoir gérer l'affichage (ça sert à rein d'afficher qqch qu'on ne voit pas ... ) donc en tout 6*16 vbo par chunk donc 441 * 6 * 16 vbo dans mon programme.

    le nombre de faces je les mets dans un tableau nb de taille [6][16] 6 et 16 pour les mêmes raisons que vertex_buffer_id ...

    donc ensuite le rendu :

    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
    // le chargement des vbo dans la carte graphique en clair ici je prends les vertex des faces bot que je mets dans le vbo [0] jusqu'a [15] vu que j'ai 16 vbo par face
     
            for(int i=0;i<16;i++){
                vertex_buffer_data = BufferUtils.createFloatBuffer(60*bot.get(i).size());
     
                for(int j=0;j<bot.get(i).size();j++){
                    vertex_buffer_data.put(bot.get(i).get(j));
                }
     
                vertex_buffer_data.flip();
     
                GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id[0][i]);
                GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertex_buffer_data, GL15.GL_STATIC_DRAW);//GL_DYNAMIC_DRAW   GL_STATIC_DRAW
                GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
            }
    et le rendu (j'affiche les 6*16 vbo (en mode bourrin normalement je fais un traitement pour afficher seulement le necessaire, mais j'ai toujours de s bugs graphiques) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(int j=0;j<6;j++){
        for(int i=0;i<16;i++){
     
            GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertex_buffer_id[j][i]);
            GL11.glVertexPointer(3, GL11.GL_FLOAT, 40, 0);
            GL11.glNormalPointer(GL11.GL_FLOAT, 40, 12);
            GL11.glColorPointer(4, GL11.GL_FLOAT, 40, 24);
            GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 6*nb[j][i]);
            GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
     
     
        }
    }
    donc ici ya 6*nb[j][i] parce que c'est les vertex pour dessiner toutes les faces, j'en ai 6 pour une face d'un cube donc en tout 6* le nombre de faces donc 6*nb[j][i]

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 151
    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 151
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Cela me semble être un problème de z-fighting (deux polygones au même endroit, qui se recouvre (se battent pour afficher leurs pixels)), même si j'ai un doute.
    Vérifiez bien que vous n'affichez pas deux fois le même polygone.
    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.

  4. #4
    Inactif
    Inscrit en
    Août 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2013
    Messages : 4
    Par défaut
    ok je vais regarder ça de plus pret

Discussions similaires

  1. Transformer une ligne en polygone
    Par bl4d3 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 02/09/2003, 09h35
  2. Comment detecter un polygon sous le curseur
    Par FreshVic dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2003, 10h48
  3. Triangulation de Polygones
    Par seb_lisha dans le forum DirectX
    Réponses: 1
    Dernier message: 01/07/2003, 12h40
  4. [Algo] Point à l'intérieur d'un polygone ?
    Par kebby dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/05/2003, 13h22
  5. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 10h39

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