¿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?

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); 
  1. Intente un dispositivo. No confío en el emulador para problemas visuales / relacionados con los gráficos.
  2. 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.
  • Procesamiento de imágenes Android OpenGL - sin SurfaceView
  • GL_OUT_OF_MEMORY después de una llamada a glDrawArrays. ¿Por qué?
  • Convertir matriz de int en Bitmap en Android
  • ¿Cómo obtenemos Polygon Antialiasing en OpenGL ES en Android 1.5?
  • ¿Por qué la matriz generada por el frustumM de Android difiere de la de los Redbook?
  • ¿Cuál es la forma más fácil de dibujar línea con OpenGL-ES (android)
  • Previsualización y procesamiento simultáneo de la cámara
  • ¿Qué significan los argumentos para frustum en OpenGL?
  • Java anidado clase interna acceso a las variables de clase externa
  • ¿cuál es el propósito de onSurfaceChanged?
  • OpenGL para Android y iPhone
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.