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 :

Charger des images PNG


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut Charger des images PNG
    Bonjour

    J'ai fait recement le tutorial de David Henry pour charger des texture png sous OpenGL.Le tutorial est tres bien fait et je remerci l'auteur.Mais lorsque je souhaite plaquer une texture sur un mesh que j'ai chargé le placage ne se fait pas correctement.Sur le mesh charger j'obtient comme texture une sorte de couleur uni qui représente globalement la couleur majoritaire de la texture.
    Je n'ai pas reussir a resoudre le probleme, j'ai pour me rassuer ecrit un code qui plaquait la texture sur un mesh mais cette fois la texture etait charger par SDL_image et j'obtenais une texure nette, j'aurai aimé avoir le meme resultat en utilisant direct libpng qui est bcp plus rapide que de SDL_image qui est vraiment trop trop gourmand.Enfin voici le 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
     
    GLuint uvmap;
     
    int main(int argc, char *argv[])
    {
        int k = 0;
        int l = 0;
        SDL_Init(SDL_INIT_VIDEO);
        if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
        {
            exit(1);
        }
        SDL_Surface *ecran = NULL;
        SDL_WM_SetCaption("Render", NULL);
        ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
        if ( ecran == NULL)
        {
            exit(1);
        }
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glPushMatrix();
        gluPerspective(70, (float)400/400, 1, 1000);
        glEnable(GL_TEXTURE_2D);
     
        int count = 1;
        int mesh;
        SDL_Event event;
        MeshData data;
        data.filename = "Uvtest.txt";
        uvmap = loadPNGTexture("Uvtest.png");
        Load3Dmesh(&data);
        SDL_EnableKeyRepeat(10,10);
        glBindTexture(GL_TEXTURE_2D, uvmap);
     
        while(count)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
                {
                    case SDL_QUIT : count = 0;break;
                }
     
        DrawInit();
        Draw3Dmesh(data, DW_QUADS|DW_TEXTURE);
        SDL_GL_SwapBuffers();
        }
        SDL_Quit();
        getchar();
        glDisable(GL_TEXTURE_2D);
        return 1;
    }
    et pour la fonction qui effectue le rendu c'est celle la

    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
     
    void Draw3Dmesh(MeshData data, unsigned char flags)
    {
        if (flags != 0)
        {
            int k = 0;
    	int l = 0;
     
    	//Rendu avec les points
    	if( (flags & DW_POINTS) != 0)
    	{
    	}
     
    	//Rendu avec les edges
    	if( (flags & DW_EDGES) != 0)
    	{
    	}
     
    	//Rendu avec les faces
    	if( (flags & DW_QUADS) != 0)
    	{
    	}
     
    	//Rendu face + texture
    	if( flags & (DW_QUADS|DW_TEXTURE) != 0)
    	{
                glBegin(GL_TRIANGLES);
                     for(k=0;k<data.nfaces;k++)
                    {
                         glTexCoord2f(data.ArrayUV[0 + l],data.ArrayUV[1 + l]);
                         glArrayElement(data.ArrayF[k*3]);
                         glTexCoord2f(data.ArrayUV[2 + l],data.ArrayUV[3 + l]);
                         glArrayElement(data.ArrayF[k*3+1]);
                         glTexCoord2f(data.ArrayUV[4 + l],data.ArrayUV[5 + l]);
                         glArrayElement(data.ArrayF[k*3+2]);
                         l += 6;
     
    	        }
                glEnd();
    	}
     
    	//Rendu face + textures(spe, bump, nor, alpha, color)
    	if( flags & (DW_QUADS|DW_ALL_TEXTURES) != 0)
    	{
    	}
     
        }
     
    }

    j'aurai vraiment apprécier d'avoir des reponses car je bosse sur ce project pour mon TIPE et j'ai envi d'avoir des bons outils pour commencer les TIPE.
    Voila je remercie d'avance tous ceux qui me repondront

  2. #2
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Si cela vient de la bibliothèque de chargement, tourne toi vers DevIl (OpenIl), c'est très bien fait, simple et relativement rapide, assez pour pas plus s'embêter.

  3. #3
    Membre averti Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par Ti-R Voir le message
    Si cela vient de la bibliothèque de chargement, tourne toi vers DevIl (OpenIl), c'est très bien fait, simple et relativement rapide, assez pour pas plus s'embêter.
    Ogre3D a recemment abandonné Devil au profit de freeimage.

    Je ne connais pas les raisons mais on peut supposer qu'il y en a de bonnes ^^.

  4. #4
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Pour ce qu'il souhaite faire, je pense qu'il n'y aura pas de problème, c'est ce qu'on utilise au boulot, et on a pas de problème. Sinon FreeImage est sûrement très bien aussi, je suis pas raciste

  5. #5
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par Kujara Voir le message
    Ogre3D a recemment abandonné Devil au profit de freeimage.

    Je ne connais pas les raisons mais on peut supposer qu'il y en a de bonnes ^^.
    De pjcast (l'un des core team member de Ogre3D):

    Why FreeImage? Because FreeImage does not have the license restrictions that DevIL does, and it can be used on Consoles - as part of making Ogre have a dual license itself.

    (source)

    Effectivement, c'est une bonne raison. Mais elle n'a rien à voir avec une question d'efficacité.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  6. #6
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Bonjour,

    Serait-ce possible de voir le code de chargement de la libpng et la version SDL ?

    Puisqu'il y a une différence dans le rendu final dépendant de ce que tu fais à ces niveaux, ce serait bien de les voir...

    Jc

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Devil ne marche pas chez moi j'avais essayé de recompiler la bibliotheque mais rien n'y fait ca n'a pas plus marcher que d'habitude
    J'avais aussi essayé FreeImage mais j'ai pas reussi a charger une image ( un fichier sur le disque quoi) j'avais chercher sur le net (le forum officiel ) et sans succes j'ai jamais pu charger une image avec FreeImage mais si quelqu'un peut m'aider je suis pret a utiliser FreeImage ( je cherche avant tout une lib qui s'interface facilement avec OpenGL)
    En tout cas je remerci tous ceux qui m'ont repondu merci

  8. #8
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Tu peux essayer Corona aussi comme biblio d'image.
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

  9. #9
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Encore une fois, sans voir le code de chargement SDL_image vs libpng, ce sera difficile de comprendre pourquoi tu obtiens un résultat différent.

    Jc

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    code de chargement SDL_image

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    void Draw3Dmesh(MeshData data)
    {
        GLint uvtex;
        int k = 0;int l = 0;
    	//Rendu avec les faces
    	SDL_Surface *img;
        glGenTextures (1, &uvtex);
        glBindTexture (GL_TEXTURE_2D, uvtex);
      // 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);
      // Chargement du fichier.
        img = IMG_Load (data.texfilename);
     
        glTexImage2D (GL_TEXTURE_2D, 0,img->format->BytesPerPixel, img->w, img->h, 0,GL_RGB, GL_UNSIGNED_BYTE, img->pixels);
        glBindTexture (GL_TEXTURE_2D, uvtex);
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3,GL_FLOAT,0,data.ArrayXYZ);
        glBegin(GL_TRIANGLES);
         for(k=0;k<(data.nfaces);k++)
        {
                         glTexCoord2f(data.ArrayUV[0 + l],data.ArrayUV[1 + l]);
                         glArrayElement(data.ArrayF[k*3]);
                         glTexCoord2f(data.ArrayUV[2 + l],data.ArrayUV[3 + l]);
                         glArrayElement(data.ArrayF[k*3+1]);
                         glTexCoord2f(data.ArrayUV[4 + l],data.ArrayUV[5 + l]);
                         glArrayElement(data.ArrayF[k*3+2]);
                         l += 6;
        }
        glEnd();
    }
     
    int main(int argc, char *argv[])
    {
        int k = 0;int t1, t2;
        SDL_Init(SDL_INIT_VIDEO);
        if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
        {
            exit(1);
        }
        SDL_Surface *ecran = NULL;
        SDL_WM_SetCaption("Render", NULL);
        ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
        if ( ecran == NULL)
        {
            exit(1);
        }
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glPushMatrix();
        gluPerspective(70, (float)400/400, 1, 1000);
        //glEnable(GL_DEPTH_TEST);
        glEnable(GL_TEXTURE_2D);
        int count = 1;
        SDL_Event event;
        MeshData cube;
        cube.filename = "Plane.txt";
        cube.texfilename = "Uvtest.png";
        Load3Dmesh(&cube);
        while(count)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
                {
                    case SDL_QUIT : count = 0;break;
                    case SDL_KEYDOWN :
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_ESCAPE : count = 0;break;
                            case SDLK_UP : k += 5;break;
                            case SDLK_DOWN : k-=5;break;
                            case SDLK_r : k = 0;break;
                        };break;
                }
                t2 = SDL_GetTicks();
            if(t2 - t1 > 30)
            {
                t1 = t2;
            }
            else
            {
                SDL_Delay( 30 - (t2 - t1) );
            }
        DrawInit();
        glRotated(k,0,0,1);
        glScaled(4,4,4);
        Draw3Dmesh(cube);
        SDL_GL_SwapBuffers();
        }
        SDL_Quit();
        Free3Dmesh(&cube);
        glDisable(GL_TEXTURE_2D);
        getchar();
        return 1;
    }

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    et pour libpng

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    GLuint uvmap;
     
    int main(int argc, char *argv[])
    {
        int k = 0;
        int l = 0;
        SDL_Init(SDL_INIT_VIDEO);
        if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
        {
            exit(1);
        }
        SDL_Surface *ecran = NULL;
        SDL_WM_SetCaption("Render", NULL);
        ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
        if ( ecran == NULL)
        {
            exit(1);
        }
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glPushMatrix();
        gluPerspective(70, (float)400/400, 1, 1000);
        glEnable(GL_TEXTURE_2D);
     
        int count = 1;
        int mesh;
        SDL_Event event;
        MeshData data;
        data.filename = "Uvtest.txt";
        /*gl_texture_t *uvtex = ReadPNGFromFile("Uvtest.png");
        
        glGenTextures(1, &uvmap);
        glBindTexture(GL_TEXTURE_2D, uvmap);
     
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     
        glTexImage2D (GL_TEXTURE_2D, 0, uvtex->internalFormat, uvtex->width, uvtex->height,0, uvtex->format, GL_UNSIGNED_BYTE, uvtex->texels);
     
        free (uvtex->texels);
        free (uvtex);*/
     
        uvmap = loadPNGTexture("Uvtest.png");
        Load3Dmesh(&data);
        SDL_EnableKeyRepeat(10,10);
        glBindTexture(GL_TEXTURE_2D, uvmap);
     
        while(count)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
                {
                    case SDL_QUIT : count = 0;break;
                    case SDL_KEYDOWN :
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_ESCAPE : count = 0;break;
                            case SDLK_a : l += 5;break;
                            case SDLK_s : l-=5;break;
                            case SDLK_LEFT : k += 5;break;
                            case SDLK_RIGHT : k -= 5;break;
                            case SDLK_r : k = 0;break;
                        };break;
                }
     
        DrawInit();
        glRotated(k,0,0,1);
        glRotated(l,1,0,0);
        glScalef(3,3,3);
        Draw3Dmesh(data, DW_QUADS|DW_TEXTURE);
        SDL_GL_SwapBuffers();
        }
        SDL_Quit();
        getchar();
        return 1;
    }
    voila et quand je compile je compile avec -lSDL -lGL -lGLU -lpng

    A la limite si quelqu'un sait utiliser FreeImage qu'il m'aide a charger un fichier .png dessus je n'y suis pas arrivé et j'aurai aimé utilisé FreeImage que la libpng toute seule surtout que FreeImage lit les .hdr un format que je souhaitera aussi utiliser

    Merci en attendant une reponse

  12. #12
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Bonjour,

    Il y a des choses que je ne comprends pas. Entre le chargement SDL_image et le chargement libpng, tout le reste du code devrait être le même. Mais ici, on remarque des grosses différences. Pourquoi ?

    Ex: la signature de Draw3DMesh.

    Ensuite, cela ne m'étonne pas que tu dises que SDL_image soit gourmand, tu l'appelle à chaque rendu. Il faut charger la texture une seule fois en début de programme. Pas à chaque rendu.

    Jc

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    effectivement...il y a trop de difference. je reposte un nouveau code

    fonction d'affichage
    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
     
    void Draw3Dmesh(MeshData data, unsigned char flags)
    {
     
        int k = 0;int l = 0;
        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3,GL_FLOAT,0,data.ArrayXYZ);
        glBegin(GL_TRIANGLES);
         for(k=0;k<(data.nfaces);k++)
        {
                         glTexCoord2f(data.ArrayUV[0 + l],data.ArrayUV[1 + l]);
                         glArrayElement(data.ArrayF[k*3]);
                         glTexCoord2f(data.ArrayUV[2 + l],data.ArrayUV[3 + l]);
                         glArrayElement(data.ArrayF[k*3+1]);
                         glTexCoord2f(data.ArrayUV[4 + l],data.ArrayUV[5 + l]);
                         glArrayElement(data.ArrayF[k*3+2]);
                         l += 6;
        }
        glEnd();
    }
    chargement avec SDL_image devient
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    int main(int argc, char *argv[])
    {
        int k = 0;int t1, t2;GLint uvtex;
        SDL_Init(SDL_INIT_VIDEO);
        if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
        {
            exit(1);
        }
        SDL_Surface *ecran = NULL;
        SDL_WM_SetCaption("Render", NULL);
        ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
        if ( ecran == NULL)
        {
            exit(1);
        }
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glPushMatrix();
        gluPerspective(70, (float)400/400, 1, 1000);
        //glEnable(GL_DEPTH_TEST);
        glEnable(GL_TEXTURE_2D);
        int count = 1;
        SDL_Event event;
        MeshData cube;
        cube.filename = "Plane.txt";
        cube.texfilename = "Uvtest.png";
        Load3Dmesh(&cube);
     
        glGenTextures (1, &uvtex);
        glBindTexture (GL_TEXTURE_2D, uvtex);
      // 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);
      // Chargement du fichier.
        img = IMG_Load (data.texfilename);
     
        glTexImage2D (GL_TEXTURE_2D, 0,img->format->BytesPerPixel, img->w,  img->h, 0,GL_RGB, GL_UNSIGNED_BYTE, img->pixels);
        glBindTexture (GL_TEXTURE_2D, uvtex);
        while(count)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
                {
                    case SDL_QUIT : count = 0;break;
                    case SDL_KEYDOWN :
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_ESCAPE : count = 0;break;
                            case SDLK_UP : k += 5;break;
                            case SDLK_DOWN : k-=5;break;
                            case SDLK_r : k = 0;break;
                        };break;
                }
            t2 = SDL_GetTicks();
            if(t2 - t1 > 30)
            {
                t1 = t2;
            }
            else
            {
                SDL_Delay( 30 - (t2 - t1) );
            }
        DrawInit();
        glRotated(k,0,0,1);
        glScaled(4,4,4);
        Draw3Dmesh(cube, DW_QUADS|DW_TEXTURE);
        SDL_GL_SwapBuffers();
        }
        SDL_Quit();
        Free3Dmesh(&cube);
        glDisable(GL_TEXTURE_2D);
        getchar();
        return 1;
    }
    chargement avec libpng
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    GLuint uvmap;
     
    int main(int argc, char *argv[])
    {
        int k = 0;
        int l = 0;
        SDL_Init(SDL_INIT_VIDEO);
        if ( SDL_WasInit(SDL_INIT_VIDEO) == -1)
        {
            exit(1);
        }
        SDL_Surface *ecran = NULL;
        SDL_WM_SetCaption("Render", NULL);
        ecran = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
        if ( ecran == NULL)
        {
            exit(1);
        }
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glPushMatrix();
        gluPerspective(70, (float)400/400, 1, 1000);
        glEnable(GL_TEXTURE_2D);
     
        int count = 1;
        int mesh;
        SDL_Event event;
        MeshData data;
        data.filename = "Plane.txt";
        uvmap = loadPNGTexture("Uvtest.png");
        Load3Dmesh(&data);
        SDL_EnableKeyRepeat(10,10);
        glBindTexture(GL_TEXTURE_2D, uvmap);
        while(count)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
                {
                    case SDL_QUIT : count = 0;break;
                    case SDL_KEYDOWN :
                        switch(event.key.keysym.sym)
                        {
                            case SDLK_ESCAPE : count = 0;break;
                            case SDLK_UP : k += 5;break;
                            case SDLK_DOWN : k-=5;break;
                            case SDLK_r : k = 0;break;
                        };break;
                }
            t2 = SDL_GetTicks();
            if(t2 - t1 > 30)
            {
                t1 = t2;
            }
            else
            {
                SDL_Delay( 30 - (t2 - t1) );
            }
        DrawInit();
        glRotated(k,0,0,1);
        glScaled(4,4,4);
        Draw3Dmesh(cube, DW_QUADS|DW_TEXTURE);
        }
        SDL_Quit();
        getchar();
        return 1;
    }
    Quand j'utilise libpng la texture apparait car la couleur du mesh change mais la texture est mal charger donc j'obtiens comme texture une sorte de moyenne de tte les couleurs présente dans la texture si ya bcp de gris sur la texture , la couleur sera grise par exemple
    Autre solution si quelqu'un sait charger une texture avec FreeImage je suis partant car moi je n'ai pas reussi a charger une texture j'obtiens des erreur de segmentation.

  14. #14
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Bonjour,

    il manque l'appel :

    Dans ton code libpng. D'ailleurs, en principe tu ne devrais plus vraiment sentir la différence entre les deux bibliothèques, si ?

    Jc

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    merci pour la reponse . j'ai effectué les modif et j'obtiens tjrs le meme resultat...je pense que je vais passer a FreeImage qui lit aussi le .hdr format que je pense utiliser plus tard et j'ai pas spécialement envi d'ecrire un parser hdr

Discussions similaires

  1. Transparence des images PNG sous Internet Explorer
    Par Torpedox dans le forum Webdesign & Ergonomie
    Réponses: 12
    Dernier message: 14/10/2008, 23h41
  2. Charger des images JPEG et PNG
    Par crischprolch dans le forum Mobiles
    Réponses: 0
    Dernier message: 21/04/2008, 15h11
  3. Problème d'exécution pour charger des images PNG
    Par milena dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 07/04/2008, 08h51
  4. Problème pour charger des images PNG
    Par milena dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 05/04/2008, 16h20
  5. Réponses: 5
    Dernier message: 14/05/2006, 12h57

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