begin process at 2008 07 05 00:09:17
1 204 994 membres
509 nouveaux aujourd'hui
14 118 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : texture avec une seule couleur transparente [ Linux / OpenGL ] (thespartan)

texture avec une seule couleur transparente le 13/01/2008 13:38:17

thespartan
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

Re : texture avec une seule couleur transparente le 13/01/2008 13:52:31

acx01b
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

Re : texture avec une seule couleur transparente le 13/01/2008 14:31:35

thespartan
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

Re : texture avec une seule couleur transparente le 15/01/2008 22:50:37

acx01b

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)



Classé sous : couleur, transparente, texture, seule, noir

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS