Transparence

 

    Dans les modes 32 bits, il y a 8 bits pour le rouge, le vert, le bleu et pour l'alpha (RGBA). L'alpha-blending (de blend en anglais signifiant melanger) consiste a faire une sorte moyenne pondere de pixels. Il n'y pas grand chose a savoir, ca marche tout seul.

 

  1. glColor4 permet de choisir une couleur en precisant la transparence. Il n'y en a pas d'exemple ici mais cela n'a rien de complique. Puisqu'il y a une texture sur le cube, autant la rendre transparente. La classe CTexture contient une methode AddAlphaLayer qui permet de rajouter a tous les points d'une texture un degre de transparence (valable pour les images 24 bits, je n'ai pas d'editeur de bitmap 32 bits, mais j'aimerais bien en avoir un, pour faire une texture de style lierre sur un mur ou autre).

    Dans le constructeur de CCube, ajouter un parametre unsigned char alpha et changer :

        m_Texture.ReadFile("Marbre.bmp");
        m_Texture.BGRtoRGB();
        m_Texture.AddAlphaLayer(alpha);
        if (!m_changeable)
        {
            m_num_list = glGenLists(1);
            glNewList(m_num_list, GL_COMPILE_AND_EXECUTE);
                if(m_Texture.GetData() != NULL)
                    glTexImage2D(GL_TEXTURE_2D,0,4, m_Texture.GetWidth(), m_Texture.GetHeight(),0,GL_RGBA,GL_UNSIGNED_BYTE, m_Texture.GetData());
                glBegin(GL_POLYGON);
                    glNormal3d(0.0,0.0,1.0);
  2. Dans OnSize, une bricole a rajouter :

        glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glEnable(GL_TEXTURE_2D);

        glShadeModel(GL_SMOOTH);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    }

    Voila, ca marche : un cube transparent, texture, eclaire qui tourne.

    Tutorial6.jpg (9369 bytes)

    Pour une legere explication de glBlendFunc, attendre la partie multitexturing.

    Code source : Tutorial6.zip

    Etape precedente     Etape suivante