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

Discussion :

OpenGL 3 [2D/3D]

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut OpenGL 3
    Bonjour,

    J'attaque l'OpenGL 3, et j'ai un souci avec mon premier programme. Impossible de comprendre pourquoi, j'ai ma scène 3D, mais mon supppppper triangle ne daigne s'afficher. Voici le code de ma scène, si quelqu'un a une petite idée :

    Main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MapEditor::MapEditor(QWidget *parent) : QMainWindow(parent), ui(new Ui::MapEditor)
    {
        ui->setupUi(this);
     
        // Specify an OpenGL 3.3 format using the Core profile.
        // That is, no old-school fixed pipeline functionality
        QGLFormat glFormat;
        glFormat.setVersion( 3, 3 );
        glFormat.setProfile( QGLFormat::CoreProfile ); // Requires >=Qt-4.8.0
        glFormat.setSampleBuffers( true );
     
        _3Dscene = new GLScene(this, glFormat);
    }
    GLScene.cpp :
    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
    #include <iostream>
    #include "GLScene.h"
     
    using namespace std;
     
    GLScene::GLScene(QMainWindow *parent, QGLFormat & glformat) : QGLWidget(glformat, parent)
    {
        // Necessary ?
        glInit();
        this->setGeometry(0,0,parent->width(),parent->height());
    }
     
    GLScene::~GLScene()
    {
    }
     
    void GLScene::initializeGL()
    {
       // makeCurrent();
     
        GLenum initialisationGLEW(glewInit());
     
        if(initialisationGLEW != GLEW_OK)
            std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
     
        glClearColor(1.0, 0.0, 0.0, 0.0);
        //glEnable(GL_DEPTH_TEST);
    }
     
    void GLScene::paintGL()
    {
        draw();
    }
     
    void GLScene::draw()
    {
        float vertices[] = {-0.5, -0.5, 0.0, 0.5, 0.5, -0.5};
     
        glClear(GL_COLOR_BUFFER_BIT);
        glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0, vertices);
        glEnableVertexAttribArray(0);
        glDrawArrays(GL_TRIANGLES,0,3);
        glDisableVertexAttribArray(0);
        swapBuffers();
    }
    Théoriquement, ca doit mafficher un triangle blanc sur fond rouge, banalement, en 2D.

    Merci d'avance !

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Au hasard, tu ne t'es trompé ni sur la transparence, ni sur les couleurs, ni sur la direction de la caméra?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    A priori la couleur par défaut c'est blanc sans transparence, et pas de direction de caméra puisqu'on est en 2D.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bon, bah, je ne sais pas que dire, je ne connais pas Qt en lui même, mais j'avais une certaine habitude d'OpenGL (dans le temps...)

  5. #5
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Un peu de lecture peut être ? La 3D avec le module OpenGL de Qt et plus généralement la catégorie OpenGL des ressources de la rubrique Qt : http://qt.developpez.com/tutoriels/#qtopengl

    Tu ne reféinis pas resizeGL ? Tu n'as pas de shaders ?

    Utilises les layout et pas setGeometry
    this-> ne sert à rien
    C'est quoi glInit ?
    Pourquoi utiliser glew ? (parfois compliqué le mélange de lib, test d'abord qu'avec Qt)

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    Bonjour

    Un peu de lecture peut être ? La 3D avec le module OpenGL de Qt et plus généralement la catégorie OpenGL des ressources de la rubrique Qt : http://qt.developpez.com/tutoriels/#qtopengl
    Je m'en vais lire ca de ce pas, c'est vrai que ca fait un moment déjà.
    Citation Envoyé par gbdivers Voir le message
    Tu ne reféinis pas resizeGL ? Tu n'as pas de shaders ?
    Si, mais je n'ai mis que le code "utile". Sinon, non, je n'ai pas encore de shaders, je voulais déjà essayer de faire fonctionner 3D et OpenGL de manière très simple, à savoir en 2D.

    Citation Envoyé par gbdivers Voir le message
    C'est quoi glInit ?
    Une vieille habitude !

    Citation Envoyé par gbdivers Voir le message
    Pourquoi utiliser glew ? (parfois compliqué le mélange de lib, test d'abord qu'avec Qt)
    Il me semble que l'on en a forcément besoin à un moment ou à un autre non ? Je sais qu'avant c'était le cas pour les VBO et d'autres implémentations diverses, ce n'est plus le cas ?

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    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 129
    Billets dans le blog
    149
    Par défaut
    Citation Envoyé par 0_Azerty_0 Voir le message
    Il me semble que l'on en a forcément besoin à un moment ou à un autre non ? Je sais qu'avant c'était le cas pour les VBO et d'autres implémentations diverses, ce n'est plus le cas ?
    Je ne suis pas sur non plus, en tout cas, Qt donne tous les outils pour éviter d'utiliser GLEW et puis les VBO sont maintenant emballer dans une classe Qt. Et peut être même que Qt possède l'ouverture des symboles d'OpenGL, donc autant que possible, on peut éviter GLEW lorsque l'on utilise Qt.
    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.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    Ca m'ennuie un peu, le but de se projet, c'est justement de me familiariser avec OpenGL 3, moi qui connait déjà le 2.

    L'utilisation de cette dernière version de GLEW est sencée m'obliger à ne pas utiliser les fonctions dépréciées. Donc si j'enlève GLEW, non seulement, faut que j'aille chercher tous les équivalents de la surcouche Qt, mais en plus, je saurai pas vraiment quelles fonctions sont dépréciées, et lesquelles ne le sont pas... :/

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    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 129
    Billets dans le blog
    149
    Par défaut
    Ce n'est parce qu'il y a les surcouches de Qt, que nous sommes obligés de les utiliser.
    Pour la création de contexte full OpenGL, je crois qu'il est possible de demander à Qt d'en faire un (en passant les bon flags, lors de la création de contexte).
    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.

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    A priori non, ou alors je trouve pas.

    Sinon pour les intéressés, on peut le forcer à pas vouloir des fonctions dépréciées en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glFormat.setProfile( QGLFormat::CoreProfile );
    EDIT : je maintiens avoir soit besoin d'utiliser les fonctions Qt, soit celles de GLEW... Dans tous les cas, je pense pas que cette dernière bibliothèque soit la cause mon problème de triangle invisible !

  11. #11
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    Bon voilà, j'ai poursuivi le turoriel pour passer enfin à une vue 3D. J'ai donc repêché la classe Shader (c'est pas dans mes habitudes, mais là, je veux avoir un premier rendu !)

    Et cela ne fonctionne toujours pas... Je ne vois franchement pas ce que j'ai pu oublier pour ne pas avoir d'affichage :/

    Qt sert uniquement à gérer la fenêtre et je ne me sers pas du tout de sa surcouche au final, donc je ne pense pas qu'il y ait d’interaction possible avec GLEW (qui est vraiment nécessaire pour moi, j'ai essayé sans, c'est bien pire. Le QGL, je verrai quand j'aurai un peu d'expérience)

    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
    #include <iostream>
    #include "GLScene.h"
     
    using namespace std;
     
    GLScene::GLScene(QMainWindow *parent, QGLFormat & glformat)
        : QGLWidget(glformat, parent),
          m_shader("./Shaders/couleurs.vert", "./Shaders/couleurs.frag")
    {
     
        // Initialisation des matrices
        projection.loadIdentity();
        modelview.loadIdentity();
     
        QTimer* updateGL = new QTimer(this);
        connect (updateGL, SIGNAL(timeout), this, SLOT(updateGL()));
        updateGL->start(1);
    }
     
    GLScene::~GLScene()
    {
    }
     
    void GLScene::initializeGL()
    {
     
        GLenum initialisationGLEW(glewInit());
     
        if(initialisationGLEW != GLEW_OK)
            std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
     
        // Set up the rendering context, etc.:
        glClearColor(0.0, 0.0, 0.0, 0.0);
     
        m_shader.initialiser();
     
        projection.perspective(70, float(width()/height()), 1, 100);
        glViewport(0, 0, this->width(), this->height());
    }
     
    void GLScene::paintGL()
    {
        glClear(GL_COLOR_BUFFER_BIT);
     
        float eye[3] = {0,0,0};
        float focus[3] = {0,0,5};
        float up[3] = {0,1,0};
     
        modelview.loadIdentity();
        modelview.lookAt(eye, focus, up);
     
        float vertices[] = {-0.5, -0.5, 50.0, 0.0, 0.5, 50.0, 0.5, -0.5, 50.0};
     
        glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0, vertices);
        glEnableVertexAttribArray(0);
        glUseProgram(m_shader.getProgramID());
     
        // On envoie les matrices au shader
        glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "modelview"), 1, GL_TRUE, modelview.getValeurs());
        glUniformMatrix4fv(glGetUniformLocation(m_shader.getProgramID(), "projection"), 1, GL_TRUE, projection.getValeurs());
     
        glDrawArrays(GL_TRIANGLES,0,3);
     
        glUseProgram(0);
        glDisableVertexAttribArray(0);
        swapBuffers();
    }
     
    void GLScene::resizeGL(int w, int h)
    {
        glViewport( 0, 0, w, qMax( h, 1 ) );
    }
     
    void GLScene::keyPressEvent(QKeyEvent* e)
    {
        if(e->key() == Qt::Key_Escape)
            QCoreApplication::instance()->quit();
    }

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 129
    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 129
    Billets dans le blog
    149
    Par défaut
    Je me demande s'il ne manque une partie, dans l'envoie des données à la carte graphique.
    On pourrait déboguer l'application OpenGL avec gDEBugger (excellent outil pour ça).

    Sinon, je n'ai pas pu tester

    et puis vous devriez aussi nous montrer le contenu des shaders, vu qu'ils sont essentiels aussi.
    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.

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    OUi effectivement, je crois qu'il manque plein de code notamment sur la bufferisation. Je vais essayer de corriger ca.

  14. #14
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 129
    Par défaut
    EDIT 2 : Merci de l'aide que tu m'as apportée. J'ai repris tout depuis le début et ca fonctionne désormais. Je ne sais pas ce qui tournait pas rond, mais une chose est sure, plus le temps de perdre du temps.

    Encore merci,
    Az

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

Discussions similaires

  1. Directx ou opengl
    Par scorpiwolf dans le forum DirectX
    Réponses: 13
    Dernier message: 07/02/2003, 08h29
  2. interface utilisateur avec OpenGL
    Par demis20 dans le forum OpenGL
    Réponses: 6
    Dernier message: 03/10/2002, 12h27
  3. OpenGL et *.3ds
    Par tintin22 dans le forum OpenGL
    Réponses: 4
    Dernier message: 06/05/2002, 13h51
  4. OpenGL ou DirectX
    Par Nadir dans le forum DirectX
    Réponses: 6
    Dernier message: 02/05/2002, 12h48
  5. Opengl -- Les surfaces
    Par Anonymous dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/05/2002, 10h14

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