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

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

Votre réponse

5 réponses

Meilleure réponse
Messages postés
326
Date d'inscription
vendredi 13 août 2004
Dernière intervention
2 novembre 2007
- 12 avril 2005 à 19:47
3
Merci
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

Merci KeniiyK 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de KeniiyK
Messages postés
25
Date d'inscription
dimanche 26 octobre 2003
Dernière intervention
13 septembre 2005
- 12 avril 2005 à 21:05
0
Merci
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
Messages postés
25
Date d'inscription
dimanche 26 octobre 2003
Dernière intervention
13 septembre 2005
- 12 avril 2005 à 21:07
0
Merci
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
Messages postés
25
Date d'inscription
dimanche 26 octobre 2003
Dernière intervention
13 septembre 2005
- 12 avril 2005 à 21:09
0
Merci
oula dsl pour le double post :x

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