OpenGL; transparence des png assombrie

Résolu
choucroute987 Messages postés 9 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 22 septembre 2011 - 2 sept. 2011 à 18:22
choucroute987 Messages postés 9 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 22 septembre 2011 - 4 sept. 2011 à 16:40
Bonjour,

Je me permet de poster dans la section C étant donné que l'OpenGl est peut utilisé avec d'autres langages...

Je suis en train de développer un jeux en objective-c pour iphone et j'ai un soucis de transparence avec mes png. En effet, la transparence de ceux-ci est assombrie :


Voici le code d'affichage des images :
glPushMatrix();

glTranslatef(point.x, point.y, 0);
glRotatef(-rotation, 0.0f, 0.0f, 1.0f);
glTranslatef(-point.x, -point.y, 0);

glColor4f(colourFilter[0], colourFilter[1], colourFilter[2], colourFilter[3]);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glEnable(GL_TEXTURE_2D);

if([texture name] != appDelegate.currentTexture) {
[appDelegate setCurrentTexture:[texture name]];
glBindTexture(GL_TEXTURE_2D, [texture name]);
}

glVertexPointer(2, GL_FLOAT, 0, qv);

glTexCoordPointer(2, GL_FLOAT, 0, tc);

glEnable(GL_BLEND);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glPopMatrix();


Je n'y connais pas grand chose en OpenGl; j'ai déjà pas mal cherché, je pense que mon soucis viens de mon gl_blend, dans l'état sans glBlendFunc.

Merci d'avance pour vos réponses!

5 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
3 sept. 2011 à 21:21
Bonsoir Choucroute,
Je ne sais pas si j'ai la solution mais
chez moi cette fonction est comme ceci

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

(je travaille en vb.net mais le langage opengl est le même)
Voici 2 liens qui te seront utiles:

Forum
Texture transparency converting from Bitmap

Regarde peut être aussi du coté du chargement des photos dans OpenGl:
fonction : GlTexImage2D

Bonne soirée CGSI3
3
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
3 sept. 2011 à 12:52
Bonjour,
Quelques pistes : (Je suis également un novice en ce domaine)

glColor4f
As tu essayé de changer les valeurs ou de mettre cette ligne en Commentaire ?

Une chose m'intrigue, ton 2 eme glTranslatef est il bien placé ?
- Tu place ton objet (translation, Rotation)
- Tu le dessine
- Tu reviens a l'origine ( Pas sur de l'utilitée de cette dernière ligne, car il me semble que glPopMatrix le fait)

Bonne Prog CGSI3
0
choucroute987 Messages postés 9 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 22 septembre 2011
3 sept. 2011 à 17:00
Salut,

Merci pour tas réponse.

Rien à faire avec glColor4f.
Pour glTranslatef si je le déplace ou le supprime ça me met un beau bazar...

J'ai pas mal cherché du côté de glBlendFunc, et j'ai fini par rajouter un paramètre à ma fonction :
if(lightTransparency) glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR);


Ca ne me semble pas très propre comme solution, non?

++
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
3 sept. 2011 à 22:08
En complément 2 Liens:

Lien
Click droit et Traduction avec LiveSearch

Lien

Tu devrais trouver la solution de ton Pb dans tout ceci.
Par contre je persiste a penser que le 2eme GlTranslated est mal placé,
tous les exemples que je possède vont dans le même sens.

Bonne soirée CGSI3
0

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

Posez votre question
choucroute987 Messages postés 9 Date d'inscription jeudi 5 avril 2007 Statut Membre Dernière intervention 22 septembre 2011
4 sept. 2011 à 16:40
Bonjour,

Merci CGSI3 pour ton aide!
J'ai bricolé et réussi à faire ce que je voulais...

Par défaut mon glBlendFunc est le même :
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

GlTranslated est peut-être mal placé, de mon côté ça fonctionne; vu mon niveau en opengl, je ne pourrai te donner la lumière sur ce mystère. :p


Salutations
0