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 :

Render simple d'un objet de style skybox [OpenGL 3.x]


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut Render simple d'un objet de style skybox
    Bonjour,

    Je suis face à cette erreur : "C2662: 'QOpenGLFunctions_3_1::glBindVertexArray'ÿ: impossible de convertir un pointeur 'this' de 'const SkyBox' en 'QOpenGLFunctions_3_1 &' La conversion perd les qualificateurs" qui est relative commune et connue. Cependant ça fait quelques heures que je recherche pourquoi j'ai cette erreur levée dans mon code sans succès ...

    J'ai une classe skybox dont le constructeur contient les lignes suivante et aucun problème soulevé sur ces lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SkyBox::SkyBox(float side, QOpenGLShaderProgram *program)
    {
    ....
        glGenVertexArrays(1, &m_vaoHandle);
        glBindVertexArray(m_vaoHandle);
    ...
    }
    maintenant je fais le render de ma skybox, simple à première vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void SkyBox::render() const
    {
        //program->setAttributeArray(m_skyboxAttribut, );
        glBindVertexArray(m_vaoHandle);
        glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, ((GLubyte *)NULL + (0)));
    }
    Et là j'ai une erreur de soulevé sur les deux lignes ... Je tiens à préciser que ma classe hérite de QOpenGLFunctions_3_1.

    des idées ? Merci par avance et pour votre attention

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 032
    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 032
    Billets dans le blog
    12
    Par défaut
    Salut!

    Effectivement dans QOpenGLFunctions_3_1, glBindVertexArray n'est pas une fonction const, tu ne peux donc pas l'appeler depuis une fonction const.
    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).

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

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    Merci beaucoup !! Je venais d'enlever le const du render, et l'erreur a disparu en effet (même si j'en ai une autre). Du coup merci pour l'explication, je ne le savais pas, je me coucherais moins bête ce soir

    Je me permets une autre question. Skybox hérite d'une classe abstraire drawable dont le render est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual void render() const = 0;
    si j'enlève le const du render de Skybox et non de drawable, j'ai une erreur comme quoi je ne peux pas instancier une classe abstraire pour Skybox (je n'ai pas l'explication mais intuitivement cette erreur ne me choque pas). Si j'enlève ensuite le const de drawable j'ai cette erreur :
    "drawable.obj: LNK2001: symbole externe non résolu "public: virtual void __thiscall Drawable::render(void)" (?render@Drawable)"

    Comment puis je le résoudre mais surtout pourquoi j'ai ces erreurs ?

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

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

    Informations forums :
    Inscription : Novembre 2009
    Messages : 212
    Par défaut
    J'ai mis par reflex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    virtual void render(){}
    Ca marche, par contre le pourquoi reste flou, je dois l'avouer ^^'

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


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

    Dans la classe mère, la fonction render() est virtuelle pure. Cela veut dire que la classe mère n'existe pas et ne peux pas exister (être instanciée) car toutes ses fonctions ne sont pas définies. Lorsque vous avez une classe fille avec une fonction render()const, cela ne surcharge pas (ne définie pas) la fonction indiquée par la classe mère, car render() et render()const sont deux fonctions différentes.
    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 confirmé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2009
    Messages
    212
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

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

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

    Merci pour l'explication, c'est très clair Je n'étais pas certaine de la réponse, je ne maîtrise pas bien les const :S (et pourtant c'est assez important).

    Merci encore !

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

Discussions similaires

  1. Problème lors d'encodage dans un Maskedit
    Par panthere6 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/06/2004, 06h35
  2. Problème lors d'un Update sur une date
    Par Nany dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2004, 22h37
  3. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58
  4. Problème lors du chargement
    Par carlito dans le forum Flash
    Réponses: 26
    Dernier message: 06/01/2004, 15h21
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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