2011-01-15 3 views
1

Я бы хотел «убить» черный цвет моей текстуры. Или, я хочу показать png-файлы без фона (прозрачный bg)Android OpenGL ES Texturing - alphablending

Как я могу это сделать? Любой пример?

ответ

3

Это не так сложно. Это основные фигуры:

public static Bitmap loadBitmapFromId(Context context, int bitmapId) { 
     InputStream is = context.getResources().openRawResource(bitmapId); 
     try { 
      BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
      bitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
      return BitmapFactory.decodeStream(is, null, bitmapOptions); 
     } catch (Exception ex) { 
      Log.e("bitmap loading exeption", ex.getLocalizedMessage()); 
      return null; 
     } 
    } 

Здесь очень важен битмап.Config.RGB_565. Затем добавьте растровое изображение и получите свой идентификатор текстуры, как обычно.

Сейчас в onSurfaceCreated (GL10 Г.Л., EGLConfig конфигурации) вашего визуализатора добавить следующее:

// Transparancy 
    // important: transparent objects have to be drawn last! 
    gl.glEnable(GL10.GL_BLEND); 
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

И рисунок часть (вы, вероятно, уже делают это):

 // first disable color_array for save: 
     gl.glDisableClientState(GL10.GL_COLOR_ARRAY); 

     // Enabled the vertices buffer for writing and to be used during 
     // rendering. 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     // Specifies the location and data format of an array of vertex 
     // coordinates to use when rendering. 
     gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); 

     gl.glEnable(GL10.GL_TEXTURE_2D); 

     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, 
       GL10.GL_LINEAR); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, 
       GL10.GL_LINEAR); 

     gl.glBindTexture(GL10.GL_TEXTURE_2D, myTextureId); 
     gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); 
     gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer); 

     gl.glDrawArrays(drawMode, 0, verticesCount); 

     gl.glDisable(GL10.GL_TEXTURE_2D); 
     // Disable the vertices buffer. 
     gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); 
+0

очень хорошо, Спасибо! – lacas