OpenGL Transparence BMP Image images [Résolu]

- 12 avril 2006 à 22:58 - Dernière réponse :  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
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Dernière intervention
22 juillet 2011
- 13 avril 2006 à 08:26
3
Merci
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 ;)
@+++

Merci platon179 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de platon179
Meilleure réponse
Messages postés
237
Date d'inscription
lundi 20 mai 2002
Dernière intervention
22 juillet 2011
- 17 avril 2006 à 08:24
3
Merci
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

Merci platon179 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de platon179
Meilleure réponse
- 7 août 2006 à 16:05
3
Merci
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 

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
- 17 avril 2006 à 04:58
0
Merci
Mais comment ca fait pour savoir quels sont les parties de l'image bmp qui sont transparente ?


MaLaDeDeDe
Commenter la réponse de Utilisateur anonyme
- 17 avril 2006 à 04:59
0
Merci
ps: et merci de bien me reponde


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


MaLaDeDeDe
Commenter la réponse de Utilisateur anonyme
- 17 avril 2006 à 05:05
0
Merci
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
Commenter la réponse de Utilisateur anonyme
- 17 avril 2006 à 15:31
0
Merci
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
Commenter la réponse de Utilisateur anonyme
- 8 mai 2006 à 00:02
0
Merci
Mais comment charge tu tes bmp ?
car l maniere dont je charge mais bmp ne me donne pas de tableau mais des texture.


MaLaDeDeDe
Commenter la réponse de Utilisateur anonyme
- 8 mai 2006 à 01:12
0
Merci
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
Commenter la réponse de Utilisateur anonyme
- 8 mai 2006 à 01:57
0
Merci
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
Commenter la réponse de Utilisateur anonyme
- 8 mai 2006 à 01:59
0
Merci
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
Commenter la réponse de Utilisateur anonyme
Messages postés
215
Date d'inscription
mardi 21 janvier 2003
Dernière intervention
21 août 2011
- 7 août 2006 à 15:59
0
Merci
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
Commenter la réponse de cs_norton

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.