¿Cómo deshacerse de los bordes dentados en Android OpenGL ES?
Tengo el siguiente código:
public void onSurfaceCreated(GL10 gl, EGLConfig config) { gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); gl.glShadeModel(GL10.GL_SMOOTH); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glDepthFunc(GL10.GL_LEQUAL); //gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); } public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity();
Pero aún así los bordes están severamente irregulares en Android Emulator. ¿Cuál es la solución?
- ¿Hay alguna biblioteca disponible para Códigos IQR (no QR-Codes)?
- Programación de juegos Android 2D: ¿usando OpenGL o no?
- ¿Por qué FloatBuffer en lugar de float ?
- Dispositivos Android GL_MAX_TEXTURE_SIZE limitación, tamaño de textura seguro
- Herramientas de OpenGL ES para Android
- Juego opengl android
- Android: Decidir entre SurfaceView y OpenGL (GLSurfaceView)
- Cómo dibujar líneas de cuadrícula en OpenGL ES Android?
- Cómo inicializar y finalizar correctamente EGL en Android
- Conversión de GLSurfaceView a TextureView (a través de GLTextureView)
- OpenGL ES 2.0 es posible sin NDK?
- EGLConfig en HTC Desire, la configuración disponible cuelga el dispositivo
- Open GL ES en Android: cómo usar gluUnProject?
Bueno, la mejor manera es usar Multisampling (Antialiasing). Puesto que usted usa el emulador esto no es una opción para usted. (Multismapling soportado en OpenGL ES 2.0, pero el emulador no soporta 2.0) De acuerdo con la especificación OpenGL, el dispositivo puede ignorar el glHint que estableció, así que no esperes mucho de él. El GL_DITHER es una forma de "falsificar" la profundidad de color de 24 bits de profundidad de color de 16 bits, básicamente no tiene nada que ver con los bordes.
Aunque hay un viejo método para "falsificar" el antialiasing, es un mismo que nunca usé, así que no puedo decirte cómo, pero puedes encontrar algunos consejos en la web.
Desde documentos OpenGL
La función de mezcla (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) también es útil para renderizar puntos y líneas antialiased en orden arbitrario.
El antialiasing de polígonos se optimiza utilizando la función de mezcla (GL_SRC_ALPHA_SATURATE, GL_ONE) con polígonos ordenados de la más cercana a la más lejana.
http://code.google.com/p/gdc2011-android-opengl/ tiene código de ejemplo para multisampling.
Está activando el suavizado de polígonos mediante una "sugerencia". Una pista es sólo que una "pista" para la implementación que desea que los bordes de polígono suavizado. La implementación es libre de ignorarla si así lo desea.
Esto es exactamente lo que está haciendo.
Además, es muy probable que simplemente no puede activar anti-aliasing en dispositivos Android porque no son lo suficientemente poderosos como para hacerlo. Esto puede ser diferente entre los teléfonos, pero, de nuevo, está estableciendo una pista.
Acabo de pasar por los mismos problemas que usted. Creo que lo que estás buscando es la siguiente línea de código:
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
- Intente un dispositivo. No confío en el emulador para problemas visuales / relacionados con los gráficos.
- Prueba
gl.glEnable(GL10.GL_DITHER);
. No estoy seguro de si está activado de forma predeterminada. También: esto hace que el dibujo sea más lento.
- Cómo obtener OnClick () de los botones agregados mediante programación?
- Uso de clases de utilidad en la programación de Android