bonjour,
je n'ai pas bien saisi si pour utiliser l'alpha dans des texture 2D (png) il faut l'activer ou pas (GL_RGBA suffit ou il faut en plus glEnable(GL_ALPHA_TEST) )?
Version imprimable
bonjour,
je n'ai pas bien saisi si pour utiliser l'alpha dans des texture 2D (png) il faut l'activer ou pas (GL_RGBA suffit ou il faut en plus glEnable(GL_ALPHA_TEST) )?
Donc a priori il suffit de spécifier gl_rgba dans glteximage2D. Mais je n'ai pas la transparence :(.
Ma création de texture se fait comme ça :
J'ai bien sûr vérifier que mon image à une couche alpha.Code:
1
2
3
4
5
6
7
8 glBindTexture (GL_TEXTURE_2D,texDefault[GLScene::FICHIER]); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,TAILLE_ICON,TAILLE_ICON,0,GL_RGBA,GL_UNSIGNED_BYTE,this->iconDefaultFichier);
Au final j'ai mon image normale mais sans couche alpha.
As tu bien lu le tuto ?
Car il parle aussi de :
... mais aussi d'ordre de rendu ... et d'incompatibilité avec le depthbuffer..Code:
1
2
3
4 glBlendFunc(GL_SRC_ALPHA,GL_ONE); glEnable(GL_BLEND); etc....
Je te conseille de bien le lire et de bien le comprendre
pourquoi on désactive le test de profondeur (ce n'est pas possible de le faire sans trier les polygon ?) quand on veut utiliser GL_BLEND ?
Et GL_BLEND me fait un truc assez moche , comme si il tracer les contour de mes faces de polygons
edit : [HS]Je croise sur le net des versions de code qui utilisent une syntaxe du type : gl.glFonction(), c'est quoi ? Je n'avais pas vu de version objet quand j'avais cherché . [/HS]
Le problème avec le depthbuffer viens surtout que les faces qui sont derrière ta face transparente ne seront pas rendues.
Je te conseille de regarder les différents paramètres de glBlendFunc pour bien comprendre sont fonctionnement.
En fait vu que j'ai besoin de la transparence sur tous mes plans je ne voit pas comment faire...
gl_blend me donne pour le moment quelquechose de trés clair et mon alpha n'est pas reconnu (j'ai du blanc à la place)
edit : le problème vient apperemment de ma texture : j'ai 4 couche et je récupère les valeur rgba directement, faut-il faire quelquechose sur la couche alpha (la ramener entre 0 et 1 par exemple ?)
j'utilise glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); et mes couleurs sont trés trés clair (presque toutes blanches).
Pour la transparence j'ai inversé ma couche alpha et ça a l'air de marcher.
je pense que ma fonction de glBlend est mauvaise mais je ne vois pas laquelle mettre.
edit : voilà ce que j'ai :
http://pix.nofrag.com/b/4/9/c797bd06...56eec88b4.html
Les images a droite (opengl) sont les même que celles de gauche (gtkmm)
j'ai l'impression d'avoir compris les attributs de glBlendFunc mais il y a une problème (donc je n'ai pas dû comprendre ;)) :
si j'ai plein d'objets transparents, si je fais toujours des sommes, j'aurais forcément des points blancs au final ... donc pas vraiment de transparence, non ? (enfin c'est ce qui a l'air de se passer pour moi)
edit : j'aimerais une confirmation concernant la couche alpha : transparent =0 ou 255 (pour la texture) ?
Effectivement, du blending additif entraine une saturation.
Une astuce consiste à rendre les objets opaque puis les objets transparents.
Par contre, il est très rare que plus de deux ou trois objets transparents se chevauche.
comment faire alors ? Le blending ne convient pas si il sature vite.
C'est pour cela qu'il faut choisir les bonnes combinaisons pour ta fonction de blending pour correspondre à tes besoins
justement je ne trouve pas. :'(
Voilà qui pourra t'aider dans tes choix : http://www.glprogramming.com/red/chapter06.html
j'ai déjà lu des explications comme ça mais je ne vois pas quel choix faire, j'ai l'impression que tous saturent :(
Tu as essayé cela ?
Code:
1
2
3
4 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // ton code glDisable(GL_BLEND);
merci shenron666 pour cette précisions.
Concernant le blending, Ti-R, oui j'ai essayé ces paramètres, ce sont ceux que j'ai actuellement d'ailleurs.
Mais le résultat sature :(.
Ce post est résolu grâce à robrob :
la solution était :
- désactiver glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
- modifier un peu la texture (mea culpa :\)
- bien choisir ce que vous m'aviez dit : glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Merci de vos réponse qui m'ont appris beaucoup.