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

Qt Discussion :

[OpenGL] Problème d'affichage avec VBO


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Par défaut [OpenGL] Problème d'affichage avec VBO
    Bonsoir, je suis relativement débutant en programmation C++ et en OpenGL, et j'aimerais effectuer des rendus OpenGL à l'aide de Qt. j'aimerais pouvoir créer des VBO et les afficher dans un QGLWidget, mais impossible d'afficher quoi que ce soit. Pour afficher le rendu OpenGL, j'ai personnalisé un QGLWidget, qui hérite également de QOpenGLFunctions, et je me suis très largement inspiré du tuto sur les VBO disponible sur developpez.com.
    Voici le code de mon widget;
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
         #include "glview.h"
     
    GLView::GLView(QWidget *parent)
        :QGLWidget(parent),
          QOpenGLFunctions(),
          rotationAngle(0.)
    {
        makeCurrent();
        initializeOpenGLFunctions();
        if(parent == 0)
        {
            this-> resize(100,100);
        }
        else
        {
            this->resize(parent->size());
        }
        //intitialisation statique des données
     
     
        IndiceArray = new GLuint[36]{
                0,1,2,2,1,3,
                4,5,6,6,5,7,
                3,1,5,5,1,7,
                0,2,6,6,2,4,
                6,7,0,0,7,1,
                2,3,4,4,3,5
    };
     
        Vertices = new GLfloat[48]{
                1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -2.0f,
                1.0f, 0.0f, 1.0f, -1.0f, -1.0f, -2.0f,
                1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f,
                0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 0.0f,
                0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f,
                0.0f, 1.0f, 1.0f, 1.0f, -1.0f, 0.0f,
                1.0f, 1.0f, 0.0f, 1.0f, 1.0f, -2.0f,
                1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -2.0f
    };
     
        VBO = new GLuint[2]();
        initializeGL();
    }
     
    GLView::~GLView()
    {
        glDeleteBuffers(2,VBO);
        delete IndiceArray;
        delete Vertices;
        delete VBO;
    }
     
    void GLView::initializeGL()
    {
        glViewport(0,0,this->width(),this->height());
     
        glGenBuffers( 2, VBO );
        glBindBuffer(GL_ARRAY_BUFFER,VBO[0]);
        glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO[1]);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(IndiceArray), IndiceArray, GL_STATIC_DRAW);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
        glBindBuffer(GL_ARRAY_BUFFER,0);
    }
     
    void GLView::resizeGL(int w, int h)
    {
        this->resize(w,h);
        glViewport(0,0,w,h);
    }
     
    void GLView::paintGL()
    {
        glClear(GL_COLOR_BUFFER_BIT);
        glClearColor(0.,0.,0.,1.);
     
        glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
        glVertexPointer( 3, GL_FLOAT, 6 * sizeof(float), ((float*)NULL + (3)) );
        glColorPointer( 3, GL_FLOAT, 6 * sizeof(float), 0 );
     
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBO[1]);
     
        glEnableClientState( GL_VERTEX_ARRAY );
        glEnableClientState( GL_COLOR_ARRAY );
     
        glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 0);
     
        glDisableClientState( GL_COLOR_ARRAY );
        glDisableClientState( GL_VERTEX_ARRAY );
     
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);
        glBindBuffer(GL_ARRAY_BUFFER,0);
     
        glFlush();
    }
     
    void GLView::setAngle(double angle)
    {
        this->rotationAngle = angle;
    }
     
    double GLView::getAngle() const
    {
        return this->rotationAngle;
    }
    La seule chose qui marche, c'est le glClearColor( j'ai testé avec d'autres couleurs :p), mais impossible d'afficher le contenu du VBO.
    Pour info, j'ai recodé ce même VBO en C en utilisant glew, et ça marche, du coup je ne comprends vraiment pas ce qui ne marche pas dans ce que j'ai fait sur Qt. Si des fois quelqu'un avait une idée d'où l'erreur pouvait venir, parce que là, je ne vois vraiment pas:/
    Merci d'avance, et n'hésitez-pas à me demander plus de précisions si besoin.

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


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

    Je vous conseille d'utiliser la fonction glGetError() pour vérifier si toutes les fonctions sont bien utilisées et après, gDEBugger pour déboguer ce qui se passe du côté du rendu.
    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.

Discussions similaires

  1. [Graphics View] Problème d'affichage avec OpenGL
    Par elwess dans le forum Qt
    Réponses: 4
    Dernier message: 20/02/2012, 09h48
  2. [Cygwin et OpenGL] Problème d'affichage
    Par CandS dans le forum Autres langages
    Réponses: 2
    Dernier message: 28/04/2005, 10h31
  3. problème d'affichage avec printf
    Par sorari dans le forum C++
    Réponses: 12
    Dernier message: 08/03/2005, 18h30
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

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