2010-09-03 17 views
5

Estoy dibujando algunas texturas con canal alfa, pero cuando se muestran parece que el canal alfa es solo binario. Por lo tanto, un píxel es transparente u opaco, aunque en el archivo de textura en sí el píxel es medio transparente. La mezcla está configurada así:android/opengles texturas alpha no semitransparentes pero binarias transparentes

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

¿Existe una solución para este problema?

Lo anterior muestra cómo debe ser similar, y el de abajo muestra cómo es:

alt text

+0

Lo internalFormat ¿Está utilizando en esa textura? –

+0

PNG con transparencia – clamp

+0

¿Puedo obtener más información sobre PNG? ¿Como fue salvado? –

Respuesta

3

Prueba esto:

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

Gracias por esto. Sin embargo, en mi caso, también funciona sin llamadas GL_ALPHA_BITS –

1

Parece que se trata de utilizar las pruebas alfa en lugar de mezcla alfa, lo que explicaría el comportamiento de umbral. Aunque no está activado por defecto, podría valer la pena intentar:

formato
gl.glDisable(GL10.GL_ALPHA_TEST); 
+0

la prueba alfa ya está deshabilitada y también en profundidad ordenar todos los objetos que estoy pintando – clamp

0

Qué superficie está usando para su GLSurfaceView? ¿Es un formato translúcido (no transparente)?

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

También la configuración de EGL debe tener un conjunto de compatibilidad alfa. Esto le dará la mejor calidad de ...

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

Editar: Otra idea es que tal vez no cargó la imagen para OpenGL en un formato translúcido con glTexImage2D?

0

¿Está almacenando el PNG en una textura GL que solo tiene 1 bit de alfa, como el formato de 5-5-5-1 de 16 bits? Esto causaría el comportamiento anterior.

Cuestiones relacionadas