2009-01-11 10 views
13

Me gustaría obtener FSAA en mi aplicación OpenGL ES en el iPhone.Cómo lograr el antialiasing de escena completa en el iPhone

Actualmente hago esto representando la escena con una textura que es dos veces el ancho y el alto de la pantalla. Luego uso la función nice:

void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height); 

para dibujar la imagen redimensionada a la resolución de pantalla.

¿Hay una mejor manera de hacerlo?

actualización Bounty Agregado Me preguntaba, dado que su ahora ene 2010, si hay una mejor manera de hacer esto en los teléfonos 3G v3.1, etc.

Respuesta

8

Para Gran Turismo en la PSP, los desarrolladores lograron un efecto similar al anti-aliasing moviendo la imagen hacia adelante y hacia atrás un píxel por cuadro (la demostración se puede encontrar aquí: http://www.gtplanet.net/why-gran-turismo-psp-looks-so-good/) así que si el iPhone no admite estás buscando esa es una opción.

+0

El único problema es que necesitas lograr 60 fps :-) –

3

GPU del iPhone Técnicamente (PowerVR MBX Lite) debe soportar anti-aliasing. Sin embargo, parece que los actuales controladores OpenGL ES de Apple (a partir de enero de 2009) no exponen esta capacidad. Entonces, hacer "AA manual" tal como lo hace es prácticamente la única manera.

2

http://iphonedevelopment.blogspot.com/2009/06/opengl-es-2-shaders.html?showComment=1245770504079#c6001476340022842908

iPhone OS 3.0 + OpenGL ES 2.0. Is anyone seeing better anti-aliasing?

Suena como que no puede hacerlo en el hardware ya que no pagaré al uso de este dispositivo, solamente una textura que los compuestos de iPhone para usted.

+0

Me gusta mucho ese enlace de blog. La explicación de por qué la función AA no está expuesta por el conductor tiene sentido total y me ayudó a entender el razonamiento. Gracias por publicarlo. – Till

8

A partir de iOS 4.0, el suavizado de pantalla completa se admite directamente mediante una extensión de Apple a OpenGL. El concepto básico es similar a lo que ya está haciendo: renderice la escena en un framebuffer más grande, luego cópielo en un framebuffer del tamaño de una pantalla y luego copie ese buffer a la pantalla. La diferencia es que, en lugar de crear una textura y representarla en un quad, la operación de copiar/muestrear se realiza mediante una única llamada a función (específicamente, glResolveMultisampleFramebufferAPPLE()).

Para obtener detalles sobre cómo configurar las memorias intermedias y modificar el código de su dibujo, puede leer a tutorial on the Gando Games blog que está escrito para OpenGL ES 1.1; También hay a note on Apple's Developer Forums explicando lo mismo.

Gracias a Bersaelor por pointing this out in another SO question.

Cuestiones relacionadas