2010-09-03 4 views
5

binaire je dessine des textures avec canal alpha, mais quand ils sont affichés il semble que le canal alpha est uniquement binaire. Un pixel est donc transparent ou opaque, bien que dans le fichier de texture lui-même, le pixel soit à moitié transparent. La fusion est configurée comme suit:textures alpha android/de OpenGLES pas transparent mais semi-transparente

gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA); 

Y a-t-il une solution de contournement pour ce problème?

qui précède montre comment il devrait être, et ci-dessous montre comment il est:

alt text

+0

Qu'est-ce que internalFormat utilisez-vous dans cette texture? –

+0

PNG avec transparence – clamp

+0

Puis-je obtenir plus d'informations sur le format PNG? Comme comment a-t-il été sauvé? –

Répondre

3

Essayez ceci:

gl.glEnable(GL10.GL_BLEND);  
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

gl.glEnable(GL10.GL_ALPHA_BITS); 
//draw... 
gl.glDisable(GL10.GL_ALPHA_BITS); 
+0

Merci pour ça. Cependant, dans mon cas, il fonctionne également sans les appels GL_ALPHA_BITS –

1

Il semble que il utilise des tests alpha au lieu de mélange alpha, ce qui expliquerait le comportement de seuillage. Bien qu'il ne soit pas activé par défaut, il pourrait être utile d'essayer:

gl.glDisable(GL10.GL_ALPHA_TEST); 
+0

alpha test est déjà désactivé et je trier aussi en profondeur tous les objets que je peins – clamp

0

Quel est le format de surface utilisez-vous pour votre GLSurfaceView? Est-ce un format translucide (non transparent)?

surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

Les paramètres EGL doivent également avoir un support alpha défini. Cela vous donnera le meilleur de la qualité ...

surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); 

Edit: Une autre pensée est que peut-être vous ne l'avez pas télécharger l'image OpenGL dans un format translucide avec glTexImage2D?

0

Entreposez-vous le PNG à une texture GL qui a seulement 1 bit alpha, tel que le format 16 bits 5-5-5-1? Cela provoquerait le comportement ci-dessus.

Questions connexes