2010-02-10 18 views
5

Necesito en antialiasing en iPhone 3G (OpenGL ES1.1), NO iPhone 3G con OpenGL ES.2.0. He dibujado el modelo 3d y tengo el siguiente: los píxeles en los bordes del modelo parecen dientes.antialiasing iPhone OpenGLES

He intentado establecer cualquier filtro para la textura, pero esto filtra SÓLO la textura DENTRO de que se vea mejor.

¿Cómo puedo hacer una buena antialising? ¿Podría ser que debería utilizar cualquier suave para dibujar triángulos? En caso afirmativo, ¿cómo es posible en OpenGL ES1.1?

gracias.

Respuesta

4

Puede procesar en un FBO más grande y luego usarlo como una textura en un cuadrado.

Eche un vistazo a this artículo para una explicación.

+0

¿Puedes explicarlo con más detalle? gracias. –

+0

¡Muchas gracias por este enlace! Y voy a tratar de "renderizar en un FBO más grande". –

+0

He publicado una nueva respuesta: el concepto es el mismo, pero hay una manera más fácil de hacerlo en las versiones más nuevas de iOS. – benzado

2

Consulte los parámetros EGL_SAMPLE_BUFFERS y EGL_SAMPLES en eglChooseConfig(), así como en glEnable(GL_MULTISAMPLE).

EDITAR: Hrm, apparently no tiene suerte, al menos en lo que respecta a los enfoques estandarizados. Como se menciona en ese hilo, puede renderizar una gran textura fuera de la pantalla y escalar a un cuadrante en pantalla más pequeño o hacer que la matriz de visión se agite varias veces.

+0

Gracias, pero openGL en el iPhone no tiene soporte eglChooseConfig(). ¿O estoy equivocado? Pero cuando configuro GL_LINE_SMOOTH y uso glDrawArrays con GL_LINE_STRIP tengo la línea SUPER antialiased. Pero cuando configuro GL_TRIANGLES, este efecto desaparece. –

+0

Parece que tienes razón. Impar. De todos modos, encontré un hilo con algunos enfoques alternativos y edité la respuesta. – genpfault

+0

genpfault, puede ser. He buscado en Google más sitios y siento que solo hay una forma: intente utilizar este http://www.gamedev.net/community/forums/topic.asp?topic_id=548956 o similar. –

8

A partir de iOS 4.0, el suavizado de pantalla completa se admite directamente a través de una extensión de Apple a OpenGL. El concepto básico es similar a la sugerencia de epatel: 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.

2

Encontramos otra manera de lograr esto. Si edita las texturas y agrega, por ejemplo, un fotograma de 2 píxeles de píxeles transparentes, los píxeles de color de la textura se mezclarán con los píxeles transparentes cuando sea necesario, lo que dará un efecto anti-aliasing básico. Puede leer el artículo completo aquí en our blog.

La ventaja de este enfoque es que no está renderizando una imagen más grande, o copiando un búfer, o peor aún, creando una textura desde un búfer, por lo que no hay impacto en el rendimiento.

+0

Este enlace a [nuestro blog] (http://agileroute.com/blog/how-to-emulate-anti-aliasing-in-opengl-es-1-1) está roto –

Cuestiones relacionadas