OpenGL : Couleur Transparente (composante alpha)

Résolu
smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005 - 12 avril 2005 à 17:29
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 - 13 avril 2005 à 18:29
Bonjour,



Je fait de l'affichage 3D avec opengl et je souhaite utiliser le
principe de couleur transparente. Apres m'etre un peu renseigné j'ai
appris à charger et a afficher une image tga en definissant la couleur
qui ne devra pas etre affichée par opengl grace à la valeur alpha que
gere le format tga. Jusque la pas de probleme ca marche, mais je me
suis rendu compte un peu plus tard qu'en réalité la couleur qui n'est
pas visible est remplacée par un noir opaque ... autrement dit ce n'est
pas ce que j'esperai puisque meme si la couleur ne se voit pas elle
reste masquante pour ce qui se trouve derriere :s



Au cas ou le probleme vienne de ma methode pour charger ma texture, voila comment je procède :



1 - Je lis le header du fichier tga

2 - Je lis le fichier ( je vous passe les details .. fread tout ca ^^ )

3- Si le header me dit que le fichier est en 32 bits par pixels je charge ma texture avec la fonction suivante :

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, ImageData);



( le GL_RGBA car je suis en 32 bpp et que je veux gerer la composante alpha de la couleur)



Voila, je suis un peu dans le flou et tres decu car je croyais avoir enfin réussi :'( donc j'espere que vous pourrez m'aider.



Merci d'avance =)


Smoove

5 réponses

KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
12 avril 2005 à 19:47
Salut, tu veux afficher en transparence ou faire des trous.... ?

Si c'est de la transparence faut faire du blending, si c'est des trous alors Alpha.

Pour le blend :
glEnable(GL_BLEND);
glBlendFunc(... , ...);

Pour l'alpha :
glEnable(GL_ALPHA_TEST);
glAlphaFunc(... , ...);

Au sinon, apparement tu charges bien ta texture...

@+, KeniiyK
3
smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005
12 avril 2005 à 21:05
Hm oui pardon je me suis peu etre mal expliqué,



C la deuxieme solution qui m'interesse : faire des "trous" , mais la
methode que tu me donne ( AlphaFunc (...) ) n'as pas l'air de
fonctionner :s



Je vais donner un exemple pour etre sur de bien me faire comprendre :



lorsqu'on veux afficher le sprite d'un personnage on utilise une image
rectangulaire du personnage (pas d'autre choix). Toutes les parties qui
ne sont pas le dessin du personnage sont peintes en rouge flachi par
exemple (255,0,255) et avec l'alpha il doit etre possible de faire en
sorte que ces parties ne soit pas visible, c'est a dire qu'elle ne
masque surtout pas le decor autour. Au bout du compte on ne vois plus
les contour de l'image mais juste le personnage.



Dans mon projet avec la methode que j'ai citée ( j'ai verifié que
j'avais bien mis glEnable(GL_ALPHA_TEST) et glAlphaFunc( ..) ) la
couleur que je definit comme ne devant pas etre visible est transformée
en noir qui lui est bien visible et masque le decor.



Conclusion je comprend pas du tout ce qui cloche :s


Smoove
0
smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005
12 avril 2005 à 21:07
Hm oui pardon je me suis peu etre mal expliqué,



C la deuxieme solution qui m'interesse : faire des "trous" , mais la
methode que tu me donne ( AlphaFunc (...) ) n'as pas l'air de
fonctionner :s



Je vais donner un exemple pour etre sur de bien me faire comprendre :



lorsqu'on veux afficher le sprite d'un personnage on utilise une image
rectangulaire du personnage (pas d'autre choix). Toutes les parties qui
ne sont pas le dessin du personnage sont peintes en rouge flachi par
exemple (255,0,255) et avec l'alpha il doit etre possible de faire en
sorte que ces parties ne soit pas visible, c'est a dire qu'elle ne
masque surtout pas le decor autour. Au bout du compte on ne vois plus
les contour de l'image mais juste le personnage.



Dans mon projet avec la methode que j'ai citée ( j'ai verifié que
j'avais bien mis glEnable(GL_ALPHA_TEST) et glAlphaFunc( ..) ) la
couleur que je definit comme ne devant pas etre visible est transformée
en noir qui lui est bien visible et masque le decor.



Conclusion je comprend pas du tout ce qui cloche :s


Smoove
0
smoove5198 Messages postés 25 Date d'inscription dimanche 26 octobre 2003 Statut Membre Dernière intervention 13 septembre 2005
12 avril 2005 à 21:09
oula dsl pour le double post :x

Smoove
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KeniiyK Messages postés 326 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 2 novembre 2007 2
13 avril 2005 à 18:29
Si j'ai bien compris tu veux que la composante Rouge de l'image représente la couche Alpha.
Alors il faut que tu travailles en RGBA et en chargeant ton image (en RGB si j'ai bien compris) il faut que tu changes les pixels en RGBA donc pour un pixel faire :
pixelImage(R,G,B) -> pixelTexture(X,G,B,R); X la couleur rouge que tu veux quand il n'y a pas de "trou".

Mais le mieux serai que l'image contienne directement le plan Alpha donc qu'elle soit en RGBA, comme ca tu loade et tu t'occupes de rien...

@+, KeniiyK
0