2010-11-20 20 views
7

Dado que la representación en capas con un sombreador de geometría en OpenGL parece un poco dudosa en algunos controladores/hardware, me gustaría sustituir la funcionalidad con mi propia solución. Esto usando una textura grande como Rendertarget, con por ejemplo una resolución de 300². Luego simula la renderización en capas renderizando hasta 100² fragmentos en la textura. Con esa resolución que daría lugar a 9 azulejos/capas como se muestra en la maqueta a continuación:Renderizar a parte de la textura

Tiles

la pregunta es; ¿Cómo esto con OpenGL? Supuestamente con la ayuda de un sombreador de geometría que representa la escena para las diferentes fichas en una sola pasada.

Respuesta

2

No hay una manera simple de hacerlo. Puede usar el sombreador de geometría para hackearlo, pero lo más probable es que sea lento, ya que tiene que realizar muchas instancias de geometría y luego usar el sombreador de geometría para sombreado de vértices también porque el sombreador de vértices está fuera del juego.

enfoque básico para el problema:

  • Dejar vertex shader vacía y sólo devuelve los vértices sin cambios
  • En shader de geometría crear 8 nuevas instancias de cada triángulo (en conjunto tendrá 9 triángulos)
  • En cada una de los triángulos ejecutan una función que proyectará el triángulo. De acuerdo con su captura de pantalla, necesitará 9 matrices de vista diferentes para enviar al sombreador de geometría.
  • Ahora arregle los triángulos para que cada uno rinda en una parte diferente de la imagen. Tenga en cuenta que después de la proyección, las coordenadas están en el rango [-1; 1] así que necesitas dividir las coordenadas de cada triángulo entre 3 y luego desplazar los triángulos correspondientes por multiplicaciones de 1/3.
  • Si calcula phong sombreado por píxel, deberá enviar la posición de la cámara al sombreador de fragmentos con cada vértice porque el sombreador de fragmentos no tiene idea de que la pantalla se está dividiendo y tiene 9 posiciones diferentes de cámara.
  • +0

    Gracias por una buena respuesta. Tal vez debería esperar a que el fabricante de GPU junte su controlador (ATI). Por lo tanto, admiten capas de representación a 'texture2Darray' en su lugar. –

    +0

    Sí, definitivamente. La pregunta es, si ATI alguna vez conseguirá que sus controladores funcionen correctamente ... –

    Cuestiones relacionadas