Transparence en OpenGl

F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008 - 11 févr. 2008 à 18:03
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 11 févr. 2008 à 23:35
Bonjour,


J'ai un problème en OpenGl


Je voudrais rendre uniquement la couleur rose transparente (R=191, V=123 et B=199)



Voici le code en OpenGl sans la couleur transparente :






glDisable(GL_DEPTH_TEST);
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glBindTexture(GL_TEXTURE_2D, g_Texture[Texture]);glLoadIdentity();
//glColor4f(1.0f,0.0f,0.0f,0.5f);
glBlendFunc(GL_SRC_ALPHA ,GL_ONE); 
glBegin(GL_QUADS);  
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1280/2+X1,  1024/2-Y1,  0);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1280/2+X1,  1024/2-Y0, 0);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1280/2+X0,  1024/2-Y0,  0);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1280/2+X0,  1024/2-Y1,  0);
glEnd();
//glColor4f(1.0f,1.0f,1.0f,1.0f);
glDisable(GL_BLEND);
glPopMatrix();






Comment dois je faire ?


Merci beaucoup


@+

4 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
11 févr. 2008 à 19:14
Tu peux pas directement. Solutions:
1) Tu rempaces tous les pixels roses de la texture par un pixel transparent.
2) Tu créés un fragment program qui fait le tri.
0
F0ra Messages postés 111 Date d'inscription mardi 18 septembre 2007 Statut Membre Dernière intervention 29 décembre 2008
11 févr. 2008 à 19:23
Coucou,


Je sais déjà tout ça.


Et je sais aussi d'avance que tu ne me donneras pas la solution comme dab.



http://www.cppfrance.com/infomsg_TEXTURE-TRANSPARENTE_1013012.aspx


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




J'ai besoin de la ligne de code qui réalise la couleur rose transparente (R =191, V=123 et B=199)


Merci


@+
0
spiky31 Messages postés 106 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 11 février 2008
11 févr. 2008 à 23:25
Salut

Il semble luhtor t'a donné les bonnes solutions et je crains qu'il n'y en ai pas d'autre.
La ligne de code qui réalise la couleur rose transparente n'existe pas, il va falloir faire avec.

++
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
11 févr. 2008 à 23:35
Oui je te donnerais pas la solution parce que:
Primo : j'ai autre chose à foutre.
Secondo : Transformer un pixel rose en un pixel transparent. Excuse moi, mais c'est bidon. Il ne m'est meme pas venu a l'esprit que ton pb venait de ca...

Solution:
tu lis tous les pixels de la texture, des que tu trouves (191, 123, 199, 255) tu remplaces par (191, 123, 199, 0).
Et enleves ca de ton code: glBlendFunc(GL_SRC_ALPHA ,GL_ONE); Le fragment arrivant doit avoir l'alpha spécifié dans la texture (d'ou le GL_SRC_ALPHA) et l'alpha du fragment existant deja dans le framebuffer, doit avoir le complémentaire (d'ou le GL_ONE_MINUS_SRC_ALPHA).

Donc si ca répond pas à la question, soit elle est pas clair et je comprend rien et dans ce cas, il faudra que tu prennes le temps de poster une screen sur imagehosting.
0
Rejoignez-nous