Texture avec une seule couleur transparente

cs_thespartan Messages postés 36 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 26 mai 2008 - 13 janv. 2008 à 13:38
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Derniè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à...)

Spartan

3 réponses

acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
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
0
cs_thespartan Messages postés 36 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 26 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?

Spartan
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
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)
0
Rejoignez-nous