2010-12-06 18 views
7

Necesito ayuda para configurar la renderización de pasadas múltiples con OpenGL ES 2.0 en el iPhone. No he podido encontrar un ejemplo que implemente tanto la representación en una textura como el sombreado de múltiples pasos.ES 2.0 Implementación Multi-Pass & Render to Texture

Busco algunas instrucciones y código de ejemplo que implementan:

  • Primera etapa: Render a una textura
  • Segunda etapa: de entrada que la textura y el render a la pantalla

I hace referencia al OpenGL ES Programming Guide de Apple, al Lenguaje de sombreado de OpenGL (Libro naranja) y al Libro de programación 3D de O'Reilly para iPhone.

El Libro naranja trata el sombreado diferido y proporciona dos programas de sombreado para el primer paso y el segundo pase, pero no proporciona un código de ejemplo para configurar esa aplicación o mostrar cómo comunicar datos entre ambos sombreadores.

Preguntas:

  • cómo representar a la textura?
    • Uso de glDrawElements
    • ¿Cómo ingresar esa textura a la próxima pasada?
  • ¿Cómo implementar dos programas de sombreado?
  • ¿Cómo se alternan los programas de sombreado de primer y segundo paso?
    • ¿Necesitas adjuntar, separar y llamar 'usar' para cada pase?
  • ¿Cómo implementar el sombreado de varias pasadas?

Respuesta

3

Ok, antes que nada: no soy un experto en OpenGL ES 2.0. Estaba en la misma situación en la que quería hacer una configuración de renderizado multipaso, en una de mis primeras aplicaciones de OpenGL ES.

También utilicé el Orange Book. Consulte el capítulo 12. Objetos Framebuffer> Ejemplos. El primer ejemplo demuestra cómo usar un framebuffer para renderizar una textura, y luego dibuja esa textura en la pantalla.

Básicamente utilizando ese ejemplo, creé una aplicación que genera cierta geometría para una textura usando un sombreador de efectos, luego procesa esa textura en la pantalla, en capas con algún otro contenido, todo usando un sombreador diferente.

No estoy seguro de si este es el mejor enfoque, pero funciona para mis propósitos. Mi configuración:

  • Creo dos framebuffers, el predeterminado y uno fuera de pantalla.Lo mismo para los renderbuffers
  • creo una textura que la aplicación va a prestar a
  • Ato el uso de este dispositivo fuera de la pantalla, y adjuntar la textura a él utilizando glFramebufferTexture2D

Mi traducción:

  • se unen el framebuffer fuera de pantalla.
  • utiliza mi primer programa de sombreado
  • desenvainar la geometría
  • unen el uso de este dispositivo por defecto
  • usar mi segundo programa de sombreado
  • dibujar un quad pantalla completa con la textura que se le atribuye.
4

escribí un breve ejemplo de hacer precisamente esto (múltiples rendir a la textura pasa en el iPhone usando OpenGL ES 2.0) hace unas semanas: http://www.mat.ucsb.edu/a.forbes/blog/?p=245

**

Editar, este post es un poco viejo, y se ha movido aquí: no parece http://blog.angusforbes.com/openglglsl-render-to-texture/

**

+0

El enlace a trabajar. Simplemente abre tu Blog en la página de inicio. ¿Podría escribir amablemente el enlace correcto? – MatterGoal

+0

Agregó el enlace. Gracias por señalar esto. –

+0

enlaces no parece funcionar –