2010-04-08 23 views
7

Basado en mi lectura de Ch. 6 en el Libro Rojo, el cambio de las cosas que necesitan ser cambiadas para ES, pensé que el siguiente código debería haber hecho:¿Cómo podemos obtener Polygon Antialiasing en OpenGL ES para Android 1.5?

gl.glEnable(GL10.GL_POLYGON_SMOOTH); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA_SATURATE, GL10.GL_ONE); 
gl.glHint(GL10.GL_POLYGON_SMOOTH_HINT, GL10.GL_NICEST); // no visible diff 
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); 
gl.glColor4f(1, 1, 1, 1); 
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);   // first and count 

etc.

Pero lo anterior falla. No hay una diferencia visible en la salida, los artefactos de alias son tan dolorosamente evidentes como antes de que se insertaran las llamadas a glEnable ... glHint.

En realidad, lo que acabo de describir fue cuando tenía GL_LINE_SMOOTH en lugar de GL_POLYGON_SMOOTH. ¡El último ni siquiera se encuentra! Entonces, ¿dónde está si no está en GL10? ¿O cómo podría haberse dejado fuera de OpenGL ES? ¿Cómo se supone que dibujemos polígonos rellenos con antialiasing si no es con GL_POLYGON_SMOOTH?

Respuesta

3

Sin intentarlo, lo que está haciendo arriba no parece incorrecto. Sin embargo, muchos teléfonos no son compatibles con anti-aliasing a pesar del hecho de que la API sí lo hace.

Debería poder lograr un suavizado de pantalla completo dibujando la pantalla varias veces mientras se agita la matriz perpective.

Ver http://www.opengl.org/resources/code/samples/advanced/advanced97/notes/node63.html y this post en relación con el mismo problema en el iPhone

+1

Andrés es, sin duda en algo y la respuesta es útil. Pero me deja pensando: ¿el emulador tampoco admite el anti-aliasing? Porque veo la falla en el emulador también. Por cierto: ¡lo primero que noté en el segundo enlace al que se refirió Andrés es que la pregunta no fue respondida allí! –