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 :

Problème VBO + texture


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 199
    Par défaut Problème VBO + texture
    Je tente de plaquer une texture sur une surface via des VBO mais seule la surface blanche s'affiche.

    Voilà mon code :

    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
        static const GLsizeiptr PositionSize = 3* 3 * sizeof(GLfloat);
        static const GLfloat PositionData[] =
        {
            1,1,1,
            1,1,-1,
            -1,1,-1,
        };
     
        static const int BufferSize = 2;
        static GLuint BufferName[BufferSize];
     
        static const GLsizei VertexCount = 3;
        enum
        {
            POSITION_OBJECT = 0,
            TEXTURE_OBJECT = 1
        };
     
        AUX_RGBImageRec * TextImage;
        TextImage = auxDIBImageLoad("green020.bmp");
     
        static const GLsizeiptr TextureSize = 3 * 2 * sizeof(GLfloat);
        static const GLfloat TextureData[] =
        {
            0.0,1.0,
            0.0,0.0,
            1.0,0.0,
        };
     
        glEnable(GL_TEXTURE_2D);
     
        unsigned int TextID;
        glGenTextures(1, &TextID);
        glBindTexture(GL_TEXTURE_2D , TextID);
        glTexImage2D(GL_TEXTURE_2D , 0 , 4 , TextImage->sizeX , TextImage->sizeY , 0 , GL_RGB , GL_UNSIGNED_BYTE , TextImage->data);
        glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_MIN_FILTER , GL_LINEAR );
        glTexParameteri(GL_TEXTURE_2D , GL_TEXTURE_MAG_FILTER , GL_LINEAR );
     
        glGenBuffersARB(1, &BufferName[POSITION_OBJECT]);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[POSITION_OBJECT]);
        glBufferDataARB(GL_ARRAY_BUFFER_ARB , PositionSize , PositionData , GL_STREAM_DRAW_ARB);
     
        glGenBuffersARB(1, &BufferName[TEXTURE_OBJECT]);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[TEXTURE_OBJECT]);
        glBufferDataARB(GL_ARRAY_BUFFER_ARB , TextureSize , TextureData , GL_STREAM_DRAW_ARB);
     
        glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[POSITION_OBJECT]);
        glVertexPointer(3, GL_FLOAT , 0 , 0);
        glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[TEXTURE_OBJECT]);
        glTexCoordPointer(2 , GL_FLOAT , 0 , 0);
     
        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_TEXTURE_COORD_ARRAY);
     
        glDrawArrays(GL_TRIANGLES , 0 , VertexCount);
     
        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);



    j'utilise GLAUX pour charger les images .bmp et ça marche nickel car je l'ai testé sur une méthode classique glBegin()....
    Sinon le tout est affiché dans une fenètre SDL et le tout marche lorsque je colore simplement la surface

    merci d'avance

  2. #2
    Membre expérimenté Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Par défaut
    Salut.

    Citation Envoyé par f56bre
    Je tente de plaquer une texture sur une surface via des VBO mais seule la surface blanche s'affiche.

    [...]

    Sinon le tout est affiché dans une fenètre SDL et le tout marche lorsque je colore simplement la surface
    Le tout marche, c'est-à-dire ? La texture s'affiche convenablement ?

    Donne tes paramètres d'initialisation OpenGL (en particulier lumière + texture) stp.

    Sinon, côté VBOs, y'a 2 erreurs

    1. Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      // Tu dois activé les vertex et texture array AVANT de binder tes buffers
      glEnableClientState(GL_VERTEX_ARRAY);
      glEnableClientState(GL_TEXTURE_COORD_ARRAY);
      // Bind des buffers
      glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[POSITION_OBJECT]);
      glVertexPointer(3, GL_FLOAT , 0 , (char *) NULL);
      glBindBufferARB(GL_ARRAY_BUFFER_ARB , BufferName[TEXTURE_OBJECT]);
      glTexCoordPointer(2 , GL_FLOAT , 0 , (char *) NULL);
      
      glDrawArrays(GL_TRIANGLES , 0 , VertexCount);
      
      glDisableClientState(GL_TEXTURE_COORD_ARRAY);
      glDisableClientState(GL_VERTEX_ARRAY);
    2. J'espère que tu as bien mis ce qui est quoté au-dessus dans ta boucle d'affichage principale non ?
      Si je demande ça c'est parce que ton code source semble être un seul bloc d'initialisation...



    PS: 2 choses à dire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum
    {
    POSITION_OBJECT = 0,
    TEXTURE_OBJECT = 1
    };
    revient au même que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum
    {
    POSITION_OBJECT = 0,
    TEXTURE_OBJECT
    };

    et évite GLAUX c'est devenu un artefact Je connais pas SDL mais elle doit bien proposer des solutions de chargement d'images non ? Au pire y'a DeVil...

    ++

  3. #3
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Sixissor
    et évite GLAUX c'est devenu un artefact Je connais pas SDL mais elle doit bien proposer des solutions de chargement d'images non ? Au pire y'a DeVil...
    ++
    Je suis d'accord, la SDL permet de charger un fichier bmp avec un simple appel à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_Surface *SDL_LoadBMP  (const char *file);
    ou alors un nombre impressionnant de types d'image en utilisant la bibliothèque annexe SDL_image en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_Surface *IMG_Load(const char *file)
    Ensuite, il suffit de regarder dans la FAQ comment passer de cette surface à une texture OpenGL :
    http://jeux.developpez.com/faq/sdl/?...PENGL_textures

    Jc

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  2. Problème de texture (ça rame !)
    Par Alex63 dans le forum OpenGL
    Réponses: 3
    Dernier message: 30/06/2006, 09h23
  3. [GLScene] Problème de textures
    Par Leobaillard dans le forum Composants VCL
    Réponses: 2
    Dernier message: 28/11/2005, 18h06
  4. Problème de texture GLscène
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2005, 18h29
  5. Problème de texture
    Par filousnt dans le forum OpenGL
    Réponses: 4
    Dernier message: 26/06/2004, 20h11

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