smoove5198
Messages postés25Date d'inscriptiondimanche 26 octobre 2003StatutMembreDernière intervention13 septembre 2005
-
12 avril 2005 à 17:29
KeniiyK
Messages postés326Date d'inscriptionvendredi 13 août 2004StatutMembreDerniè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 :
smoove5198
Messages postés25Date d'inscriptiondimanche 26 octobre 2003StatutMembreDernière intervention13 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
smoove5198
Messages postés25Date d'inscriptiondimanche 26 octobre 2003StatutMembreDernière intervention13 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
KeniiyK
Messages postés326Date d'inscriptionvendredi 13 août 2004StatutMembreDernière intervention 2 novembre 20072 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...