2009-03-04 7 views

risposta

30

Per iPhone e N95 funziona:

Se si caricano texture da dati grezzi, impostare formato interno e la fonte di GL_RGBA.

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

E durante il rendering, abilitare alpha blend:

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

che funziona grazie! Come follow-up, come potrei aumentare la trasparenza delle texture dopo questo? – Dimitris

+2

Usa la modulazione del colore. glTexEnvx (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); Quindi impostare il componente alfa del colore su desiderato. glColor4f (255, 255, 255, alfa); – Virne

11

La risposta fornita da @Virne è corretta, e sono stato in grado di usarlo per i dispositivi Android con alcune piccole modifiche. L'oggetto myImage che ho usato è un'immagine standard .png con trasparenza.

ho creato la texture usando questo:

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

E (come Virne), ho attivato alpha blend durante il rendering:

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

Hai dimenticato il 'GL10' in' gl.glBlendFunc (GL10.GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); ' – Vincent

+0

Grazie, ho modificato la risposta per correggere quel refuso! – theisenp

+0

Se si decodifica l'immagine bitmap prima di impostare con texImage2d, Non dimenticate di specificare che è un bitmap ARGB .: \t \t \t \t BitmapFactory.Options opta = new BitmapFactory.Options(); \t \t opts.inPreferredConfig = Bitmap.Config.ARGB_8888; \t \t Bitmap bitmap = BitmapFactory.decodeResource (context.getResources(), R.drawable.bitmap, opts); – jonathanrz

Problemi correlati