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.
- 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);
- 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.
Pour une legere explication de glBlendFunc, attendre la partie multitexturing.
Code source : Tutorial6.zip
Etape precedente Etape suivante