2010-11-28 48 views
0

J'essaye de rendre une texture avec alpha à un frame buffer avec alpha. J'ai besoin que la transparence de la texture soit contrôlée par une combinaison de sa propre alpha, et de l'alpha déjà rendue dans le buffer d'image.Fusion OpenGL avec source et destination alpha

-à-dire:

transparence normal:

(src_colour * src_alpha) + (dst_colour * 1-src_alpha)

transparence requise:

(src_colour * src_alpha * dst_alphe) + (dst_colour * 1- (src_alpha * dst_alpha))

Quelqu'un peut-il comprendre comment faire?

Je travaille là-dessus pendant 9 heures maintenant :-)

J'utilise OpenGL 1.0 avec GL11ExtensionPack sur Android, donc j'avoir accès à glBlendFunc et glBlendFuncSeparate. Je préférerais ne pas aller sur la route GLES20 avec des shaders car cela nécessiterait beaucoup de code à réécrire.

Merci, Andrew

+0

Le mélange GL standard ne prend pas en charge cette fonctionnalité. Les shaders ne le font pas non plus (en un seul passage). Qu'essayez-vous d'accomplir? Il pourrait y avoir d'autres moyens. – Bahbar

+0

Le jeu est un shoot-em-up à défilement vertical, vu d'un point de vue top-down. Les paysages, les vaisseaux spatiaux, les missiles, etc. sont rendus au premier plan, avec un ciel et un champ de vision à l'arrière-plan. Ensuite, il y a des détails tels que les bâtiments ajoutés au paysage, qui projettent des ombres. (Les ombres sont cuites dans les textures.) J'ai besoin des ombres pour affecter seulement ce qui est au premier plan, pas le fond. Je l'ai fait en utilisant un tampon stencil, mais certains sprites du jeu ont une transparence alpha, donc la solution binaire on/off du tampon stencil était insuffisante. Les ombres doivent se mélanger. –

Répondre

1

C'est la solution que je l'ai utilisé:

  1. permettent la couleur et alpha
  2. écritures glBlendFunc (GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA)
  3. rendre au premier plan objets
  4. disabe alpha écrit
  5. rendre les ombres
  6. objets qui rendent les ombres coulée
  7. glBlendFunc (GL10.GL_ONE_MINUS_DST_ALPHA, GL10.GL_DST_ALPHA)
  8. Rendu des objets fond

Cela produit l'effet désiré des ombres apparaissant uniquement sur les objets de premier plan. Effectivement, le tampon alpha devient un tampon stencil avec une opacité variable.

Heureusement que mes objets d'arrière-plan n'ont pas de transparence, comme s'ils le faisaient je ne pense pas qu'il y aurait moyen d'obtenir cet effet sans utiliser de shaders.