cs_thespartan
Messages postés36Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention26 mai 2008
-
13 janv. 2008 à 13:38
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 2014
-
15 janv. 2008 à 22:50
Bonjour. J'affiche un bmp pour lequel le noir ne doit pas être affiché
et pour cela j'utilise du blending (il me semblait qu'on pouvait y
parvenir avec...). Mais dans toutes mes tentatives, c'est toute l'image
qui a tendance à devenir transparente : si le noir n'est plus opaque
comme je voulais, le reste de l'image non plus...
quels seraient les bons arguments de glBlendFunc? (j'en ai essayé pas mal déjà...)
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 13 janv. 2008 à 13:52
le plus simple serait de faire une texture rbga avec a = 0 pour le noir et a = 0.5 (ou un peu plus un peu moins) pour les autres couleurs
après y'a d'autres techniques mais je ne m'y connais pas trop
note que si tu stockes ta texture dans un bmp (ou jpg que tu décompresses en bmp) tu peux d'abord parcourir le bmp rgb 24 bit pour voir quels pixels sont noirs et calculer la valeur a de ton nouveau pixel rgba en fonction, enfin c'est comme ça que je ferais
cs_thespartan
Messages postés36Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention26 mai 2008 13 janv. 2008 à 14:31
j'y ai pensé mais ça me rebutait un peu étant donné que ce n'est pas moi qui ai écrit le loader bmp que j'utilise...
Donc voici la structure de l'image :
struct Image {
unsigned long sizeX;
unsigned long sizeY;
char *data;
};
donc quand je charge l'image , je transforme :
glTexImage2D(GL_TEXTURE_2D, 0, 3, image1->sizeX, image1->sizeY, 0, GL_RGB,
GL_UNSIGNED_BYTE, image1->data);
en
en glTexImage2D(GL_TEXTURE_2D, 0, 4, image1->sizeX, image1->sizeY, 0, GL_RGBA,
GL_UNSIGNED_BYTE, image1->data);
il faut que tout les 3 éléments de data, j'insère une composante alpha cest bien ça?
puis quand je sélectionne la texture : glBindTexture(GL_TEXTURE_2D, texture[?]), l'affichage se fera en RGB donc il faut que j'active l'alpha testing avant pour passer en RGBA, c'est ça?
acx01b
Messages postés280Date d'inscriptiondimanche 7 septembre 2003StatutMembreDernière intervention 8 juillet 20146 15 janv. 2008 à 22:50
oui au moment de l'affichage il faut activer gl_apha test ou gl_blend
mais au moment de la création de la texture il faut juste remplacer le GL_RGB par GL_RGBA comme tu as fait
(les couleurs sont entre 0 et 255 si tu es en mode GL_UNSIGNED_BYTE)