OpenGL Transparence BMP Image images

Résolu
Utilisateur anonyme - 12 avril 2006 à 22:58
 Utilisateur anonyme - 7 août 2006 à 16:05
Bonjour je fais un jeu avec openGL
et je voudrais savoir comment fair pour que certainnne partie d'une image bmp soit transparente.

Merci


MaLaDeDeDe

13 réponses

platon179
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Statut
Membre
Dernière intervention
22 juillet 2011
2
13 avril 2006 à 08:26
Salut :)

Le plus simple est d'utiliser la transparence alpha, voici comment j'ai fait ca dans mon projet :

Tu charges ton image BMP, avec un canal alpha... Si tu n'as pas de canal alpha, tu peux toujours le générer à la volée lorsque tu charges ton image, c'est ce que je fais (tu dis par exemple que tout ce qui est noir doit être transparent, et tu ajoutes une composante de couleur en fonction de ceci)....

Après, pour l'affichage, tu peux faire comme ceci :
glAlphaFunc(GL_GREATER, 0.0f);
glEnable(GL_ALPHA_TEST);
glBegin(GL_QUADS);
// Affichage de ton quadrilatère, texturé avec ton image BMP
glEnd();
glDisable(GL_ALPHA_TEST);

Tout simplement :)
Si t'as d'autres questions, hésite pas ;)
@+++
3
platon179
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Statut
Membre
Dernière intervention
22 juillet 2011
2
17 avril 2006 à 08:24
Salut,
Voici le code que j'utilise pour ajouter un canal alpha a une image :

unsigned char *bitmapWithAlpha = (unsigned char *)malloc(largeur * hauteur * 4);
for (unsigned int src 0, dst 0; src < largeur * hauteur * 3; src +=3, dst +=4)
{
if (img[src] == 0 && img[src+1] == 0 && img[src+2] == 0)
bitmapWithAlpha[dst+3] = 0;
else
bitmapWithAlpha[dst+3] = 0xFF;

bitmapWithAlpha[dst] = img[src];
bitmapWithAlpha[dst+1] = img[src+1];
bitmapWithAlpha[dst+2] = img[src+2];
}

Sachant que le tableau img (de taille largeur de ton image * hauteur de ton image * 3) est le tableau contenant les données sans canal alpha, et bitmapWithAlpha est le tableau contenant la même image, mais avec un canal alpha, et transparente partout où c'est noir.... Pour modifier la couleur sur laquelle se fera la transparence, tu n'as qu'à modifier le premier test dans le for, là je teste si les trois composantes valent 0, donc si c'est noir... Si tu veux que la transparence se fasse sur le couleur verte pure, tu feras :

if (img[src] == 0xFF && img[src+1] == 0 && img[src+2] == 0)

Les couleurs sont dans l'ordre standard R G B

Voilà, @+
Bonne journée
3
Utilisateur anonyme
7 août 2006 à 16:05
Non desolé en faite j'ai eu plein de probleme a la suite cela, alors je me suis orienté sur un loader de TGA.
C'est un format trés semblable au bmp sauf qu'il a un canal alpha.
Et moi j'édite la tranparence de mes images TGA avec paint shop pro 7.
Si tu veux le loader de TGA envoi moi ton e-mail par MP (message privé)

MaLaDeDeDe 97one 
3
Utilisateur anonyme
17 avril 2006 à 04:58
Mais comment ca fait pour savoir quels sont les parties de l'image bmp qui sont transparente ?


MaLaDeDeDe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
17 avril 2006 à 04:59
ps: et merci de bien me reponde


MaLaDeDeDe
0
Utilisateur anonyme
17 avril 2006 à 05:02
Car les images BMP n'ont pas de précision sur l'alpha des pixels


MaLaDeDeDe
0
Utilisateur anonyme
17 avril 2006 à 05:05
A NON ESQUSE J'MAL LUT !!
Comment fait'on pour dire que tout ce qui est noir est transparent montre moi un exemple avec des detail stp
Merci beaucoup..


MaLaDeDeDe
0
Utilisateur anonyme
17 avril 2006 à 15:31
Merci j'ai pas encore testé mais si ca marche pas je te le dirais
Je vais utiliser cela betement et quand j'aurais finit de lire mon livre ur opengl je vais regarder le fonctionnement de ta source

merci


MaLaDeDeDe
0
Utilisateur anonyme
8 mai 2006 à 00:02
Mais comment charge tu tes bmp ?
car l maniere dont je charge mais bmp ne me donne pas de tableau mais des texture.


MaLaDeDeDe
0
Utilisateur anonyme
8 mai 2006 à 01:12
J'ai une fonction qui charge en RGB sol2.bmp et met le Unsigne char dans la structure image1. Au final la sol2.bmp est dedans: image->data ( c'est une structure).

GLuint texturealpha;

ImageLoad("texture/sol2.bmp", image1);
unsigned char *SolAlpha = (unsigned char *)malloc(64 * 64 * 4);


unsigned int src 0, dst 0; while(src < 64 * 64 * 3){ src +=3, dst +=4;
{
if (image1->data[src] == 0 && image1->data[src+1] == 0 && image1->data[src+2] == 0)
image1->data[dst+3] = 0;
else
SolAlpha[dst+3] = 0xFF;


SolAlpha[dst] = image1->data[src];
SolAlpha[dst+1] = image1->data[src+1];
SolAlpha[dst+2] = image1->data[src+2];
}}



glGenTextures(1, &TextureAlpha);
glBindTexture(GL_TEXTURE_2D, TextureAlpha);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, image1->sizeX, image1->sizeY, 0,
GL_RGBA, GL_UNSIGNED_BYTE, SolAlpha);






et quand j'affiche l'image le noir est toujours la( il n'est pas transparent):

glBindTexture(GL_TEXTURE_2D,TextureAlpha);
glAlphaFunc(GL_GREATER, 0.0f);
glEnable(GL_ALPHA_TEST);
glBegin(GL_QUADS);
glTexCoord2f(10,10);
glVertex3f(75,0,-75);
glTexCoord2f(-10,10);
glVertex3f(-75,0,-75);
glTexCoord2f(-10,-10);
glVertex3f(-75,0,75);
glTexCoord2f(10,-10);
glVertex3f(75,0,75);
glEnd();
glDisable(GL_ALPHA_TEST);


MaLaDeDeDe
0
Utilisateur anonyme
8 mai 2006 à 01:57
Sébon J'ai la solution Jéavais fait une erreur dedan (le truc suivant c'est la corection fallait remplacer un 3 par un 4 ou GL_RGBA):

glGenTextures(1, &TextureAlpha);
glBindTexture(GL_TEXTURE_2D, TextureAlpha);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image1->sizeX, image1->sizeY, 0,
GL_RGBA, GL_UNSIGNED_BYTE, SolAlpha);


MaLaDeDeDe
0
Utilisateur anonyme
8 mai 2006 à 01:59
Si quelqu'un ne si retrouva pas je peux déposer une source complete avec tous ce qu'il faut il suffit d'en faire la demande sur se forum


MaLaDeDeDe
0
cs_norton
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
21 août 2011

7 août 2006 à 15:59
Helo, j'aimerai faire un GUI pour mon jeux et j'ai quelques soucis avec la transparence des images...
Si tu as toujours ta source j'en prendrai volontier connaissance .
Merci

@+
Norton
0