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 :

OpenGL et Qt : Chargement d'une texture


Sujet :

OpenGL

  1. #1
    Membre du Club
    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
    Points : 68
    Points
    68
    Par défaut OpenGL et Qt : Chargement d'une texture
    Salut,

    J'ai un problème en essayant de charger une texture en OpenGL avec Qt.
    J'essaye de convertir l'image chargée au format OpenGL, mais alors il semble qu'il y ait un problème de format, car une assertion saute.

    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
    void Texture::load(QString file)
    {
        textpath = QDir::currentPath()+"/"+MESHES_PATH+file;
     
        if(QFile::exists(textpath)) {
            QImage temp;
            temp.load(textpath);
            temp.convertToFormat(QImage::Format_RGB32);
            if(image.load(textpath),"JPG") {
     
                cout << "success to load : " << textpath.toStdString() << endl;
                image = QGLWidget::convertToGLFormat(temp);
                cout << "after convertion" << endl;
                init();
            }
        }
        else
            cout << "Warning : La texture " << file.toStdString() << " n'existe pas dans : "
                 << (QDir::currentPath().toStdString()+"/"+MESHES_PATH) << endl;
    }
     
    void Texture::init()
    {
        // Generates 1 id and write it on ID
        glGenTextures(1, &ID);
     
        // Bind texture
        glBindTexture(GL_TEXTURE_2D, ID);
     
        // Send pixels to GC
        glTexImage2D(GL_TEXTURE_2D, 0, 3, image.width(), image.height(), 0, format, GL_UNSIGNED_BYTE, image.bits());
     
        // Filters
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     
        // Unbind
        glBindTexture(GL_TEXTURE_2D, 0);
    }
    J'appelle la fonction load et j'ai une assertion sur la fonction statique QGLWidget::convertToGLFormat(temp) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ASSERT: "dst.depth() == 32" in file c:\ndk_buildrepos\qt-desktop\src\opengl\qgl.cpp, line 2207
    Invalid parameter passed to C runtime function.
    Invalid parameter passed to C runtime function.
    alors que mon image est correctement chargée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    success to load : C:/Users/.........../resources/mesh/cube.jpg
    Ma variable membre format es définie comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GLuint format;
    format = GL_RGB;
    J'ai essayé de setter le format de l'image chargée en openGL avec le bon format en faisant : "temp.convertToFormat(QImage::Format_RGB32);", mais il semble que cela ne fonctionne pas.

    Je ne vois pas vraiment comment corriger le problème et ce que je fais de mal...

    Merci d'avance,
    Az

  2. #2
    Membre du Club
    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
    Points : 68
    Points
    68
    Par défaut
    Problème réglé avec le format de l'image : Ca marche ne prenant du PNG et en passant le format à GL_RGBA en conséquence. (attention au troisième paramètre qu'il faut passer à 4 dans la fonction glTexImage2D() ).

    Cela ne répond pas à la question : Mais comment faire pour passer du JPG ? Si quelqu'un a la solution, je suis preneur.

    Merci au tuto suivant et notamment au paragraphe VI-B : http://fhalgand.developpez.com/tutor...ication/#LVI-B cependant la technique pour pouvoir charger le format Jpg ne fonctionne pas !

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

Discussions similaires

  1. OpenGL calculer la taille d'une texture en memoire
    Par Pinokio3x7 dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/04/2010, 09h28
  2. Réponses: 7
    Dernier message: 23/12/2008, 18h30
  3. Réponses: 5
    Dernier message: 09/11/2006, 10h36
  4. [c#] chargement d'une texture a partir d'un objet Image
    Par elguignardo dans le forum DirectX
    Réponses: 2
    Dernier message: 29/03/2006, 09h18
  5. Chargement d'une texture a partir de la mémoire
    Par logramme dans le forum DirectX
    Réponses: 6
    Dernier message: 27/01/2003, 14h57

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