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

Développement 2D, 3D et Jeux Discussion :

[C++] aide Qt OpenGL création minecraft like


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Par défaut [C++] aide Qt OpenGL création minecraft like
    bonjour,

    je suis entrain de créer un minecraft-like mais comme je suis débutant j'ai quelques problèmes surtout avec OpenGL avec ce bout de code en ce moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(f.glIsShader(m_vertexID) == GL_TRUE)
            f.glDeleteShader(m_vertexID);
    j'ai besoin de "f" pour utiliser certaines fonctions d'OpenGL (c'est un QGLFunctions)
    m_vertexID est un GLuint qui contient l'ID de mon vertex shader
    j'ai un assert sur la première ligne qui me renvois a ce bout de qglfunctions.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    inline GLboolean QOpenGLFunctions::glIsShader(GLuint shader)
    {
    #ifdef QT_OPENGL_ES_2
        GLboolean result = ::glIsShader(shader);
    #else
        Q_ASSERT(QOpenGLFunctions::isInitialized(d_ptr));
        GLboolean result = d_ptr->IsShader(shader);
    #endif
        Q_OPENGL_FUNCTIONS_DEBUG
        return result;
    }
    sortie de l'application :
    Démarrage de C:\Users\Administrateur\Desktop\programmes\build-OpenGL-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\OpenGL.exe...
    ASSERT: "QOpenGLFunctions::isInitialized(d_ptr)" in file C:\Qt\5.3\mingw482_32\include/QtGui/qopenglfunctions.h, line 1715
    Invalid parameter passed to C runtime function.
    Invalid parameter passed to C runtime function.
    C:\Users\Administrateur\Desktop\programmes\build-OpenGL-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\OpenGL.exe s'est terminé avec le code 3
    une fenetre visual c++ runtime library s'ouvre avec un message "this application has requested the Runtime to terminate it in an unusual way, please contact..."
    puis une fenetre OpenGL.exe a cessé de fonctionner.
    (oui j'ai appellé mon programme OpenGL pour l'instant)

    j’espère que quelqu'un pourra m'aider
    merci

  2. #2
    Membre actif Avatar de monwarez
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 144
    Par défaut
    Tu devrais essayer de faire un bloc: try / catch
    et ne pas oublier #include <exception>
    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
     
    try
    {
     if(f.glIsShader(m_vertexID) == GL_TRUE)
            f.glDeleteShader(m_vertexID);
    }
    catch(exception const & e)
    {
        cerr << "Exception dérivée des exceptions standard" << endl;
        cerr << e.what() << endl;
    }
    catch(...)
    {
       cerr << "Autre type d'exception " << endl;
    }
    Si c'est le "Autre type d'exception" qui s'affiche dans la console , alors il faudrat voir si Qt utilise un système d'exception non dérivé de exception
    Edit: peut être mettre ce post dans la catégorie OpenGL ( le mieux serait d'avoir des liens sur plusieurs forum (c++ Qt OpenGL) qui redirige vers un seul "post" , après je sais pas ci c'est possible )

  3. #3
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Salut !

    Le code de test de l'assertion est assez explicite et devrait t'aider à comprendre ce qui ne va pas.
    La condition QOpenGLFunctions::isInitialized(d_ptr) est fausse, ce qui signifie que tu as du oublier d'appeler une fonction d'initialisation de QOpenGLFunctions. (pour info, j'ai juste tapé QOpenGLFunctions dans Google ...)

    EDIT :
    Pour info, les instructions OpenGL s'effectuent sur un contexte OpenGL actif. Il faut donc d'abord que tu te renseignes sur la manière créer un contexte OpenGL avec Qt, sachant qu'un tel contexte est généralement lié à une fenêtre.
    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).

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Par défaut
    c'est bon j'ai réglé ce problème mais maintenant j'ai des problèmes avec des fonctions visiblement dépréciés (pour les vertex array) mais je pense faire un nouvel objet QOpenGLFunctions_3_0_CoreBackEnd pour pouvoir les utiliser et le try catch ne sert a rien c'est une assertion

  5. #5
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 183
    Par défaut
    c'est bon j'ai presque résolu touts les bugs (pour l'instant) il reste plus qu'une erreur : undefined reference to `QOpenGLFunctions_3_0_CoreBackend::QOpenGLFunctions_3_0_CoreBackend(QOpenGLContext*)'
    c'est a dire le constructeur de QOpenGLFunctions_3_0_CoreBackend :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cube::Cube(float taille, std::string const vertexShader, std::string const fragmentShader, QOpenGLContext* ctx) : m_shader(vertexShader, fragmentShader, ctx), m_vboID(0), m_tailleVerticesBytes(108 * sizeof(float)), m_tailleCouleursBytes(108 * sizeof(float)), m_vaoID(0), g(ctx)
    c'est g qui est concerné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        QOpenGLFunctions_3_0_CoreBackend g;
    il prend ctx en argument qui est un pointeur sur un QOpenGLContext
    je ne vois pas ce qui peut causer ce bug

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    "Undefined reference" => Erreur de link.
    Es-tu sur d'avoir lié la bibliothèque associée ?
    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).

Discussions similaires

  1. Aide sur la création d'une bdd sous MySQL
    Par Shellai-93 dans le forum Débuter
    Réponses: 20
    Dernier message: 18/08/2006, 11h15
  2. Aide sur la création d'un type simple (nom composite)
    Par testeur dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 06/11/2004, 20h30
  3. [Oracle] Aide pour la création d'un trigger
    Par Sonic dans le forum Administration
    Réponses: 14
    Dernier message: 04/11/2004, 19h54

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