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 :

Vao vbo d'un cube texturé [GLSL]


Sujet :

OpenGL

  1. #1
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut Vao vbo d'un cube texturé
    Bonjour,

    J'essaie d'afficher un cube en glsl (qt 5.) et j'ai une page grise (correspondante à mon font définis), mon cube ne s'affichant donc pas... Je ne trouve pas d'exemple en glsl qt récent sur le sujet ... Pour le moment je cherche à seulement afficher un cube sans texture, et par la suite avec texture (j'ai essayé directement en texture sans succès, j'ai donc décidé de faire par étape).

    Voici mon code pour le cube :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    SkyBox::SkyBox()
    {
       vertices[0] = -1.0; vertices[1] = -1.0; vertices[2] =  1.;  // v0
           vertices[3] = 1.0; vertices[4] = -1.0; vertices[5] =  1.0; // v1
           vertices[6] = 1.0; vertices[7] =  1.0; vertices[8] =  1.; // v3
           vertices[9] = -1.0; vertices[10] =  1.0; vertices[11] =  1.0;  // v2
           vertices[12] = -1.0; vertices[13] = -1.0; vertices[14] = -1.0; // v9
           vertices[15] = 1.0; vertices[16] = -1.0; vertices[17] = -1.0; // v5
           vertices[18] = 1.0; vertices[19] =  1.0; vertices[20] = -1.0; // v7
           vertices[21] = -1.0; vertices[22] =  1.0; vertices[23] = -1.0;  // v11
     
     
       GLushort indices[] = {
            0,1,2, 2,3,0,
            0,3,4, 4,5,0,
            0,5,6, 6,1,0,
            1,6,7, 7,2,1,
            7,4,3, 3,2,7,
            4,7,6, 6,5,4
        };
     
       glGenBuffers(1, &m_vbuffer);
        glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
        glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(double), vertices, GL_STREAM_DRAW);
     
       glGenBuffers(1, &m_ibuffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLushort), indices, GL_STREAM_DRAW);
     
     
        glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
    }
     
    void SkyBox::render(QOpenGLShaderProgram *program)
    {
        glEnableVertexAttribArray(0);
     
        glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
     
        int vertexLocation = program->attributeLocation("a_position");
        program->enableAttributeArray(vertexLocation);
        glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(double), vertices);
     
        // Draw cube geometry using indices from VBO 1
        glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, 0);
    }
    et pour mes shaders :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #version 430
    uniform mat4 mvp_matrix;
     
    attribute vec4 a_position;
     
    void main()
    {
        gl_Position = mvp_matrix * a_position;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #version 430
    void main()
    {
        gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
    }
    ma matrice mvp est bonne, pour l'utiliser dans d'autre programme. et je suis bien placé au centre de la fenêtre grâce à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glViewport(0, 0, this->size().width(), this->size().height());
    Des idées sur le problème ? si non un exemple sur le sujet peut être ?

    Merci par avance !

  2. #2
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    Pour information un simple glDrawArrays marche pour un triangle, mais je n'utilise pas d'indexation vbo ce que je trouve dommage. Si quelqu'un a des pistes ...

    EDIT : également pour un carré coloré ...

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


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

    Je vous conseille la consultation de cette page :

    mais aussi d'aller fouiller du côté de glDEBugger pour voir si les informations sont bien envoyées au GPU .

    Sinon, ainsi, je ne vois pas d'erreur (mais c'est aussi pour ça que j'utilise un débogueur).
    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
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    Merci pour la réponse. J'ai parcouru les tuto, appliqué pas mal des solutions mais j'ai toujours le même comportement ... Pour le Logiciel dont vous parliez, j'ai fait l'installation 32 et 64 (sous windows) et j'ai une erreur de rapporté au lancement du logiciel (cette fenêtre apparaît et disparaît presque immédiatement) :

    Nom : Capture.PNG
Affichages : 251
Taille : 93,6 Ko

    Du coup, je n'ai plus beaucoup de pistes ... J'ai donc écrit tout mes vertex à la main, perte de temps pour moi et en perf ... D'ailleurs j'ai une erreur bizarre, j'essaie de mapper une texture sur mon cube (puissance de 2 -> 512*512), mais seul le premier pixel de l'image texture est appliqué à l'ensemble des faces de mon cube ...

    Edit: j'ai signalé mon problème au sujet du logiciel

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Arf, c'est pas de chance pour gDEBugger (même si le logiciel est vieillissant et plus supporté ).

    Peut être les outils de AMD : http://developer.amd.com/tools-and-s...pu-perfstudio/ (cela peut fonctionner même sur les cartes NVIDIA).
    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.

  6. #6
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    L'outil semblait bien commode ^^

    Pour le second il marche bien, merci c'est super outil j'ai utilisé le Frame Debugger et j'ai pu voir que mes triangles sont bizarrement formé (cf image), j'ai vérifié 3 fois les coordonnées envoyées et elles me semblent correcte. Je suppose que ce problème n'arrange en rien mon mappage de texture qui ne fonctionne pas.

    Pour la partir vao/vbo, rien à signaler sur ce que j'ai pu voir... Je vais faire de plus amples recherches avec ce logiciel en espérant trouver quelque chose

    Nom : Capture.PNG
Affichages : 422
Taille : 49,3 Ko

  7. #7
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    J'ai repris la génération de mon cube, il est parfaitement dessiné, j'ai tout de même toujours ce problème de texture. Elle semble bien chargé au niveau gpu (d'après le logiciel), mais elle ne se map pas (ou plutôt seulement le premier pixel se mappe à chaque face)

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Comment est initialisée/configurée, la texture ?
    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.

  9. #9
    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 379
    Points
    11 379
    Billets dans le blog
    10
    Par défaut
    Dans le code d'initialisation de ton VBO, je ne vois pas de coordonnées de texture.
    Tu en as bien?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  10. #10
    Membre régulier
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Points : 93
    Points
    93
    Par défaut
    Oui je les ai mise entre temps les coordonnées. Elles sont correcte. Mon erreur était assez idiote, je n'avais fait l'initialisation que pour 2 objets et non 4 dans le buffer ... merci à vous pour votre aide, et aussi pour ce super outil que je garde sous la main !

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

Discussions similaires

  1. Tutoriel OpenGL Moderne : un cube texturé
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 16/04/2014, 23h11
  2. Utilisation des VAO/VBO
    Par seeme dans le forum OpenGL
    Réponses: 4
    Dernier message: 15/04/2012, 22h21
  3. [VBO] Utilisation d'une texture globale et d'un VBO
    Par Vinc35 dans le forum OpenGL
    Réponses: 5
    Dernier message: 15/11/2007, 12h36

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