Problème d'affichage de texture

cs_Turok Messages postés 78 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 3 décembre 2011 - 22 janv. 2007 à 21:23
cs_Turok Messages postés 78 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 3 décembre 2011 - 23 janv. 2007 à 19:03
Bonjour,
Alors voila le problème est simple, voici un code que j'utilise pour afficher une simple image 2d en utilisant OpenGl et SDL, mais celui ci ne m'affiche qu'un carré blanc...

#include <SDL/SDL.h>
#include <SDL/SDL_Image.h>
#include <GL/gl.h>
#include <GL/glu.h>

void DrawScreen()
{

    GLuint texture_name;
    SDL_Surface *texture;
    GLuint objet;

    // ---- Création d'un objet de texture. ------------------------------------------------
    glGenTextures (1, & texture_name);
    glBindTexture (GL_TEXTURE_2D, texture_name);
    // Paramétrage de la texture.
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

    texture = IMG_Load("Background.png");

    // Jonction entre OpenGL et SDL.
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, texture-> pixels);

    glEnable (GL_TEXTURE_2D);

    glBindTexture (GL_TEXTURE_2D, texture_name);

    glBegin(GL_QUADS);
        glTexCoord2i (0, 0) ; glVertex2i(0,0);
        glTexCoord2i (1, 0) ; glVertex2i(0,600);
        glTexCoord2i (1, 1) ; glVertex2i(800,600);
        glTexCoord2i (0, 1) ; glVertex2i(800,0);
    glEnd();

    glDisable (GL_TEXTURE_2D);

    glFlush();
    SDL_GL_SwapBuffers();

}

int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_WM_SetCaption("Mon premier programme OpenGL !",NULL);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
    SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
    gluOrtho2D(0, 800, 600, 0);

    bool continuer = true;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
            continuer = false;
        }

        glClear(GL_COLOR_BUFFER_BIT);

        DrawScreen();

    }

    SDL_Quit();

    return 0;
}
 

Turok

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
23 janv. 2007 à 17:20
Bon deja, je sais pas si ta conscience que ton code, charge la texture du disque dur a chaque frame, que tu demandes a opengl de récréer une nouvelle texture a chaque frame sans détruire la précédente.
Donc avant de régler le pb de l'affichage, règles ces quelques aberrations.

Et pense aussi a définir le MAG_FILTER, je sais pas s'il est défini par défaut:
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
0
cs_Turok Messages postés 78 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 3 décembre 2011
23 janv. 2007 à 19:03
Oui, je te remercie de signaler ça, étant donné que j'étais focalisé sur le fait de réussir à afficher une simple image, j'en ai oublié les bases.

Sinon ba toujours le même problème, voici le nouveau code :

#include <SDL/SDL.h>
#include <SDL/SDL_Image.h>
#include <GL/gl.h>
#include <GL/glu.h>

GLuint texture_name;
SDL_Surface *texture;
GLuint objet;

void LoadTextures()
{

    // ---- Création d'un objet de texture. ------------------------------------------------
    glGenTextures (1, & texture_name);
    glBindTexture (GL_TEXTURE_2D, texture_name);
    // Paramétrage de la texture.
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

    texture = IMG_Load("Background.png");

    // Jonction entre OpenGL et SDL.
    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, texture->w, texture->h, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, texture-> pixels);

}

void DrawScreen()
{

    glEnable (GL_TEXTURE_2D);

    glBindTexture (GL_TEXTURE_2D, texture_name);

    glBegin(GL_QUADS);
        glTexCoord2i (0, 0) ; glVertex2i(0,0);
        glTexCoord2i (1, 0) ; glVertex2i(0,600);
        glTexCoord2i (1, 1) ; glVertex2i(800,600);
        glTexCoord2i (0, 1) ; glVertex2i(800,0);
    glEnd();

    glDisable (GL_TEXTURE_2D);

    glFlush();
    SDL_GL_SwapBuffers();

}

int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);
    SDL_WM_SetCaption("Mon premier programme OpenGL !",NULL);
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
    SDL_SetVideoMode(800, 600, 32, SDL_OPENGL);
    gluOrtho2D(0, 800, 600, 0);

    bool continuer = true;
    SDL_Event event;

    LoadTextures();

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
            continuer = false;
        }

        glClear(GL_COLOR_BUFFER_BIT);

        DrawScreen();

    }

    SDL_Quit();

    return 0;
}

Turok
0
Rejoignez-nous