2012-06-18 12 views
6

Para cada punto que toma mi programa de sombreado OpenGL, crea un anillo rojo que transita suavemente entre opaco y totalmente transparente. Mi programa de sombreado funciona, pero tiene artefactos de bandas.¿Por qué mi programa de sombreado OpenGL para puntos tiene artefactos de bandas?

El sombreador de fragmentos está a continuación.

#version 110 

precision mediump float; 

void main() { 
float dist = distance(gl_PointCoord.xy, vec2(0.5, 0.5)); 

// Edge value is 0.5, it should be 1. 
// Inner most value is 0 it should stay 0. 
float inner_circle = 2.0 * dist; 
float circle = 1.0 - inner_circle; 

vec4 pixel = vec4(1.0, 0.0, 0.0, inner_circle * circle); 

gl_FragColor = pixel; 
} 

Aquí está el vertex shader menos interesante que no creo que es la causa del problema.

#version 110 

attribute vec2 aPosition; 

uniform float uSize; 
uniform vec2 uCamera; 

void main() { 
// Square the view and map the top of the screen to 1 and the bottom to -1. 

gl_Position = vec4(aPosition, 0.0, 1.0); 
gl_Position.x = gl_Position.x * uCamera.y/uCamera.x; 

// Set point size 
gl_PointSize = (uSize + 1.0) * 100.0; 
} 

Por favor, ayuda a averiguar, ¿por qué mi programa de sombreado OpenGL tiene artefactos de bandas?

P.S. Por cierto, esto es para una tableta Acer Iconia de Android.

+0

¿Se puede hacer una consulta glGet con GL_ALPHA_BITS? ¿Tal vez el número de bitplanes alfa en su superficie de renderizado es pequeño? – Tim

+0

@Tim Me está dando 0. –

+0

Hola Tim, me pregunto si has resuelto el problema. –

Respuesta

2

GLSurfaceView de Android utiliza una superficie RGB565 por defecto. O bien active el difuminado (glEnable(GL_DITHER)) o instale un EGLConfigChooser personalizado para elegir una configuración de superficie RGBA o RGBX con 8 bits por canal.

Cuestiones relacionadas