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

DevIL Discussion :

[DevIL] Pas de transparence avec les .dds


Sujet :

DevIL

  1. #1
    Membre averti
    [DevIL] Pas de transparence avec les .dds
    Salut

    J'ai un probleme avec DevIL pour charger les fichiers .DDS
    Bon ca charge, mais je n'ai pas la transparences, alors que le fichier .dds l'a (jai regarder avec d'autre viewer)

    Donc je suis en OpenGL, donc de tete, il me semble que je fais un
    GLuint texture = ilGLLoadImage("nom fichier.dds");

    Ensuite je fais un glBindTexture ou je sais plus

    Enfin bref, comment ca se fait que ca marche pas la transparence", malgre que la texture saffiche bien comme il faut, il manque juste la transparence :'(, il y a une facon special pour les .dds?

    Désole de manquer d'exemple de code
    Le forum c'est trop génial

  2. #2
    Rédacteur

    Tu es sûr que c'est la texture qui est mal chargée, et pas l'alpha-blending qui est mal paramétré par exemple ?
    Tu as vérifié que le format interne de ta texture (avec un glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &Format)) contenait bien un canal alpha ?

  3. #3
    Membre averti
    c'est quoi la variable "&format"?

    Sinon, je n'ai pas fait l'instruction que tu as indiqué. Cependant, la texture est bien transparente, car elle le fait sous un visualisteur d'image. Aussi dans le jeu original dont est issu la texture .dds.

    Un parametre ou instructions que j'aurai oublié?
    Le forum c'est trop génial

  4. #4
    Rédacteur

    c'est quoi la variable "&format"?
    Le but c'était de te donner le nom de la fonction et le paramètre à récupérer, pas de te donner la ligne toute cuite à insérer dans ton code... Regarde la documentation pour savoir comment ça marche et à quoi ça correspond.

    Cependant, la texture est bien transparente, car elle le fait sous un visualisteur d'image. Aussi dans le jeu original dont est issu la texture .dds.
    Je veux bien croire volontiers que l'image possède un canal de transparence, moi je parlais de la texture une fois chargée par ton programme.

    Tu n'as pas non plus parlé de la façon dont tu affichais ta texture.

  5. #5
    Membre averti
    j'utilse les fonction d'OpenGL, la seul fois ou je me sert de DevIL, c'est quand je charge l'image avec

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    GLuint texture;
    texture = ilutGLLoadImage("nom.dds"); //ici
    glBindImage(GL_TEXTURE_2D, texture);
     
    glEnable(GL_TEXTURE);
    glTextCoord2d(1,1);


    Surement que je fais un mauvais mélange et qu'il faut que j'utilise plus de fonction ilut

    Le code n''est pas exact, j'ecris de tete, je ne suis pas chez moi
    Le forum c'est trop génial

  6. #6
    Membre averti
    j'en ai marre, j'laisse tombé, j'perd mes soirée essayer de foutre cette foutu transparence, je pige rien a leur fonction, le site de DEvil est mal foutu, avec des jolie erreur 404, et des exemple de code super restrenit
    Le forum c'est trop génial

  7. #7
    Rédacteur

    Apparemment mes conseils non plus n'ont pas l'air de te plaire... Tant pis

  8. #8
    Membre averti
    Voila un code complet, compilable chez moi (si vous avez bien mis les librairies SDL et DevIL)

    Qui affiche la texture. Et je n'ai pas la transparence :'(. Si tu pouvez jeter un coup d'oeil j'en serai ravi

    http://www.savefile.com/files/602402

    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
     
    #include <stdlib.h>
    #include <stdio.h>
     
    #include <SDL/SDL.h> // SDL
     
    //#include <GL/gl.h> // OpenGL
    //#include <GL/glu.h>
    //#include <GL/glut.H>
     
    #include <IL/ilut.h>
    #include <IL/devil_internal_exports.h>
     
     
    void dessiner()
    {
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity( );
     
        glBegin(GL_QUADS);
            glTexCoord2d(0,1);
            glVertex3d(-1,1,0);
            glTexCoord2d(1,1);
            glVertex3d(1,1,0);
            glTexCoord2d(1,0);
            glVertex3d(1,-1,0);
            glTexCoord2d(0,0);
            glVertex3d(-1,-1,0);
        glEnd();
     
        glFlush();
        SDL_GL_SwapBuffers();
    }
     
     
    int main (int argc, char * argv[])
    {
        int continuer = 1;
        SDL_Event event;
        SDL_Surface *ecran;
        ILuint texture1;
        char * nomTexture= {"./Image.dds"};
     
        /* On initialise tout */
        SDL_Init(SDL_INIT_VIDEO);
        ilInit();
        iluInit();
        ilutRenderer(ILUT_OPENGL);
     
        /*Afichage en 3D*/
        ecran = SDL_SetVideoMode(680,460, 32, SDL_OPENGL);
        SDL_WM_SetCaption("Editor v0.1",NULL);
     
        gluOrtho2D(-2,2,-2,2); //Reglage de la taille du repere
        glEnable(GL_TEXTURE_2D); //Active les texture
     
        ilSetInteger(IL_FORMAT_MODE, IL_RGBA);
        ilEnable(IL_FORMAT_SET);
     
        texture1 = ilutGLLoadImage(nomTexture);
        dessiner();
     
        /*Boucle jusqu'a quitter*/
        while (continuer == 1)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                dessiner();
            }
        }
     
       /*On supprime tout*/
        glDeleteTextures (1, &texture1);
        ilShutDown();
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    Le forum c'est trop génial

  9. #9
    Rédacteur

    Tu n'actives pas l'alpha-blending.

  10. #10
    Membre averti
    Salut

    Bon le resultat est meilleur, merci.

    Par contre petit soucis, le model est un aussi un peu transparent. En fait j'ai regarder le canal alpha du fichier .dds, et il y a plusieur degree de noir, et lui il considere que c'est tout ces differents degree de noir qu'il faut mettre en transparent-> plus c'est noir et plus ca sera transparent.

    Or moi ce que je veux, c'est que juste le noir foncé soit transparent du canal alpha, donc couleur (0,0,0). Donc definir cette couleur comme tranparente.

    Je sais pas si c'est possible, et si oui, comment faire.
    Le forum c'est trop génial

  11. #11
    Membre averti
    Re

    C'est bon, j'ai reussi, en lisant dans la faq

    au lieu de mettre le blend, j'ai mis l'apha test.

    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER, 0.0f);

    Ca fait que tout chaque pixel noir foncé de ma couche alpha correspondra a une invisibiltié
    Par contre, la couche alpha est mal foutu, ca fait que l'image n'est pas correct, c'est pas grave, je me debrouillerai

    Merci
    Le forum c'est trop génial

  12. #12
    Expert confirmé
    Citation Envoyé par Sacha999
    Par contre, la couche alpha est mal foutu, ca fait que l'image n'est pas correct, c'est pas grave, je me debrouillerai
    tu peux aussi mettre une valeur plus grande dans la fonction glAlphaFunc(GL_GREATER, 0.0f)
    prendre des pixels noir/gris foncé (avec 0.1f par exemple)
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

###raw>template_hook.ano_emploi###