2010-11-17 20 views
5

¿Alguien sabe cómo habilitar la mezcla en OpenGL (Android) en un HTC Desire. Estoy tratando de dibujar triángulos de colores y usar el valor alfa del buffer de color para mezclarlos con el fondo (u otro triángulo).¿Por qué la mezcla OpenGL no funciona en HTC Desire?

Funciona tanto en el emulador (2.1) como en un htc hero 2.1 pero no en mi deseo con 2.2. ¿Hay alguna diferencia de hardware entre un héroe y un deseo que causa esto?

El material principal del código es (no en orden):

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. Puedo proporcionar más código si alguien lo necesita ...

+0

Supongo que el deseo no implementa la función. A diferencia de Direct3D, que recae en la representación del software, con OpenGL si una función no está implementada, simplemente no funciona. O al menos así es como solía funcionar. – ChrisF

+0

El hecho es que los triángulos mezclados con texturas parecen funcionar en el deseo. Pero no cuando se usan memorias intermedias de color. – Sunkas

+3

Ocurre exactamente lo contrario. Con DirectX, si se informa que una característica es compatible, se hará en hardware. Con OpenGL (incluido GL | ES), se debe admitir una característica que no sea una extensión. Si no está en el hardware, entonces en el software. Para OpenGL | ES 1.0 alfa-blending es obligatorio. –

Respuesta

3

Jonas, tu comentario sobre la iluminación parece estar bien, así que ahora creo que tenemos una respuesta. La especificación de OpenGL ES 1.1.12 indica The value of A produced by lighting is the alpha value associated with dcm, donde dcm es el color difuso del material.

Si ha habilitado COLOR_MATERIAL, entonces el color difuso del material y el color ambiental del material se toman del color del vértice actual. Esto implicaría que el deseo es incorrecto, y el emulador es correcto.

Si ha deshabilitado COLROR_MATERIAL (el estado predeterminado), el material de color difuso se configura con glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats). Esto implicaría que el deseo es correcto, y el emulador es incorrecto.

+0

Gracias por su respuesta. Tenía COLOR_MATERIAL habilitado antes. Intenté deshabilitarlo pero todavía no tuve éxito, lo que permitió la fusión y la luz al mismo tiempo en Desire. Estoy 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); y matAmbient y matDiffuse tiene valores alfa (si eso importa).También intenté desactivar y habilitar GL_DEPTH_TEST, pero no tuve suerte allí. ¿Cualquier otra sugerencia? – Sunkas

Cuestiones relacionadas