Sprite Transparent OpenGL

shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013 - 9 févr. 2010 à 00:22
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013 - 18 mars 2010 à 11:08
Salut à Tous

Je voudrais Dessiner un Sprite (Texturer Donc)
La Texture est entierement Noir sauf une Forme en Blanc.

Je veux que seule la Forme resorte !!!
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_COLOR,GL_ONE_MINUS_SRC_COLOR);

Jusque là tout va Bien !!
La partie Noire n'est pas Visible.
Seule resort la Forme !!


Le Problème aparait lorsqu'un Objet Transparent s'interpose entre 'Nous' et le Sprite
=> Le Sprite n'est pas 'mélanger'

Cela parait normal selon le Code ci dessus, mais se n'est pas ce que je veux !!
Je voudrais mélanger le Sprite dans ce cas là..


Apparement, il faudrait que j'écrive dans le Depth_Buffer mais quelle opération réaliser ?

Certainement comme un Stencil, mais Comment l'Adapter sur le Depth_buffer
HELP !!!

2 réponses

underprog Messages postés 19 Date d'inscription samedi 7 novembre 2009 Statut Membre Dernière intervention 16 mai 2010
16 mars 2010 à 14:11
Plutot que le blending ou l'utilisation des stencils buffers, tu peux utiliser des images en 32 bits (avec canal alpha)...
Dans ton code de chargement de texture, mets bien 'GL_RGBA' a la place de GL_RGB.

Et pour le rendu de ton sprite :

glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.7f); // Rendu des pixels ayant une composante alpha supérieur a 0.7 (fait varier cette valeur a ta convenance)

// ...
// Selection de la texture
// Rendu Sprite
// ...

glDisable(GL_ALPHA_TEST);
0
shorzy Messages postés 94 Date d'inscription jeudi 23 novembre 2000 Statut Membre Dernière intervention 1 juin 2013
18 mars 2010 à 11:08
Effectivement.

Je ne pensais pas utilisé cette méthode-ci puisque l'Image existe déjà et n'est pas en 32 Bits.
Je vais Modifier l'Image, même voire même créer un Bout de Programme pour y arrivé. (Si c'est le Cas je le Posterais avec un Liens ici)

J'utiliserais ensuite la méthode GL_ALPHA_TEST.

Je pensais qu'il existait d'autre méthode (Acrobatique)
Merci de m'avoir rappelé cela

++
0