Soy un novato en OpenGL moderno. Me siento cómodo con la metodología inmediata de OpenGL, pero nunca he hecho un uso serio de los VBO. Mi pregunta es sobre animación. En el modo inmediato, para lograr la animación, solo tiene que transmitir diferentes posiciones de vértice (interpoladas desde fotogramas clave) en el espacio de objetos.
¿Cómo se logra esto en OpenGL no inmediato? Obviamente, cargar datos VBO nuevos para cada cuadro seguramente va a acaparar el bus de gráficos. No he encontrado ninguna literatura sobre la forma moderna de hacerlo. Pensando en ello, llegué a varias opciones:
- Atributos: animación como desplazamiento 3d. Para cada cuadro, se pasa un atributo de desplazamiento diferente (posible interpolado) para cada vértice, aplicado al mismo vértice en cada fotograma clave.
- Índices: almacenar fotogramas clave como vértices absolutos y acceder a ellos mediante la indexación, utilizando un conjunto diferente de vértices para cada fotograma clave. Este enfoque me parece imposible, ya que no puede acceder a fotogramas clave adyacentes y, por lo tanto, no puede interpolar entre ellos. Además, parece una mala idea para la animación de procedimientos.
- Textura: esto puede ser muy elástico pero parece una buena solución para mí. Nuevamente, la animación se piensa como un desplazamiento xyz para cada vértice. Cada fotograma clave se puede almacenar en una textura 1D donde la dimensión se asigna a vertexID. Si no me equivoco, en OpenGL 4.0 puede acceder a las texturas desde cualquier sombreador, por lo que puede leer esta textura desde el sombreador de vértices y aplicar cada transformación de vértice. Una textura 2D podría contener varios cuadros. Todavía realiza la interpolación (y si la interpolación funciona para texturas fuera del sombreador de fragmentos, de lo que no estoy seguro, ¡puede interpolar linealmente gratis!) Esto podría aplicarse a sistemas de animación más complejos como la animación ósea sin mucho esfuerzo.
¿Estoy pensando demasiado en esto? ¿Alguien puede arrojar algo de luz?