2010-11-17 10 views
5

Qualcuno sa come abilitare la fusione in OpenGL (Android) su un HTC Desire. Sto cercando di disegnare triangoli colorati e usare il valore alfa del buffer dei colori per fonderli con lo sfondo (o un altro triangolo).Perché il blending di OpenGL non funziona su HTC Desire?

Funziona sia sull'emulatore (2.1) che su un htc hero 2.1 ma non sul mio desiderio con 2.2. C'è qualche differenza hardware tra un eroe e un desiderio che causa questo?

La roba principale dal codice è (non in ordine):

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

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

private final static float[] colors = { 
     1f, 0f, 0f, 0.5f, // point 0 red 
     1f, 0f, 0f, 0.5f, // point 1 red 
     1f, 0f, 0f, 0.5f, // point 2 red 
     1f, 0f, 0f, 0.5f, // point 3 red 

     1f, 0f, 0f, 0.5f, // point 4 red 
     1f, 0f, 0f, 0.5f, // point 5 red 
     1f, 0f, 0f, 0.5f, // point 6 red 
     1f, 0f, 0f, 0.5f, // point 7 red 
}; 

PS. Posso fornire più codice se qualcuno ne ha bisogno ...

+0

Direi che il desiderio non implementa la funzione. A differenza di Direct3D, che ricade sul rendering del software, con OpenGL se una funzione non è implementata, semplicemente non funziona. O almeno è così che funzionava. – ChrisF

+0

Il fatto è che i triangoli di fusione con trame sembrano funzionare sul Desiderio. Ma non quando si usano i buffer dei colori. – Sunkas

+3

Esattamente il contrario è vero .. Con DirectX, se una funzionalità viene segnalata come supportata, verrà eseguita in hardware. Con OpenGL (incluso GL | ES) una funzione che non è un'estensione deve essere supportata. Se non in hardware, quindi nel software. Per OpenGL | ES 1.0 la miscelazione alfa è obbligatoria. –

risposta

3

Jonas, il tuo commento sull'illuminazione sembra giusto, e così ora penso che abbiamo una risposta. La specifica OpenGL ES 1.1.12 indica The value of A produced by lighting is the alpha value associated with dcm, dove dcm è il colore diffuso del materiale.

Se è stato abilitato lo COLOR_MATERIAL, il colore diffuso del materiale e il colore dell'ambiente del materiale vengono entrambi presi dal colore del vertice corrente. Ciò implicherebbe che il desiderio non sia corretto e che l'emulatore sia corretto.

Se è stato disabilitato COLROR_MATERIAL (lo stato predefinito), il materiale a colori diffusi viene impostato con glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats). Ciò implicherebbe che il desiderio sia corretto e che l'emulatore non sia corretto.

+0

Grazie per la risposta. COLOR_MATERIAL è stato attivato prima. Ho cercato di disabilitarlo ma ancora non successo abilitando la fusione e la luce allo stesso tempo su Desiderio. Sto usando: gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); e matAmbient e matDiffuse hanno valori alfa (se questo è importante).Ho anche provato a disabilitare e abilitare GL_DEPTH_TEST ma non ci sono fortuna. Qualche altro suggerimento? – Sunkas