En OpenGL ES, ¿cómo cargo una textura que tiene píxeles transparentes?

StackOverflow https://stackoverflow.com/questions/611219

  •  03-07-2019
  •  | 
  •  

Pregunta

¿Y luego mostrar correctamente? Un ejemplo sería tener una bola redonda en un rectángulo mientras se puede ver otra textura en el fondo.

editar: en este momento, cuando cargo la textura, los píxeles transparentes de la imagen de origen se muestran en negro.

¿Fue útil?

Solución

Para iPhone y N95 esto funciona:

Si está cargando textura desde datos sin procesar, establezca el formato interno y de origen en GL_RGBA.

glTexImage2D(GL_TEXTURE_2D, 0, 
    GL_RGBA,
    textureWidth,
    textureHeight, 
    0, 
    GL_RGBA,
    GL_UNSIGNED_BYTE,
    pointerToPixels);

Y al renderizar, habilite la mezcla alfa:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

Otros consejos

La respuesta proporcionada por @Virne es correcta, y pude usarla para dispositivos Android con algunas pequeñas modificaciones. El objeto myImage que utilicé es una imagen .png estándar con transparencia.

Creé la textura usando esto:

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, myImage, 0);

Y (como Virne), habilité la mezcla alfa al renderizar:

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top