OpenGL : Couleur Transparente (composante alpha) [Résolu]

smoove5198 25 Messages postés dimanche 26 octobre 2003Date d'inscription 13 septembre 2005 Dernière intervention - 12 avril 2005 à 17:29 - Dernière réponse : KeniiyK 326 Messages postés vendredi 13 août 2004Date d'inscription 2 novembre 2007 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
KeniiyK 326 Messages postés vendredi 13 août 2004Date d'inscription 2 novembre 2007 Dernière intervention - 12 avril 2005 à 19:47
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de KeniiyK
smoove5198 25 Messages postés dimanche 26 octobre 2003Date d'inscription 13 septembre 2005 Dernière intervention - 12 avril 2005 à 21:05
0
Utile
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
Commenter la réponse de smoove5198
smoove5198 25 Messages postés dimanche 26 octobre 2003Date d'inscription 13 septembre 2005 Dernière intervention - 12 avril 2005 à 21:07
0
Utile
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
Commenter la réponse de smoove5198
smoove5198 25 Messages postés dimanche 26 octobre 2003Date d'inscription 13 septembre 2005 Dernière intervention - 12 avril 2005 à 21:09
0
Utile
oula dsl pour le double post :x

Smoove
Commenter la réponse de smoove5198
KeniiyK 326 Messages postés vendredi 13 août 2004Date d'inscription 2 novembre 2007 Dernière intervention - 13 avril 2005 à 18:29
0
Utile
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
Commenter la réponse de KeniiyK

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.