Sono un principiante del moderno OpenGL. Sono a mio agio con l'immediata metodologia OpenGL, ma non ho mai fatto un uso serio dei VBO. La mia domanda riguarda l'animazione. In modalità immediata, per ottenere l'animazione devi solo trasmettere diverse posizioni di vertici (interpolate da fotogrammi chiave) nello spazio oggetti.
Come si ottiene questo in OpenGL non immediato? Ovviamente, il caricamento di nuovi dati VBO per ogni fotogramma farà sicuramente salire il bus grafico. Non ho trovato alcuna letteratura sul modo moderno di farlo. Pensandoci, sono arrivato a diverse opzioni:
- Attributi: animazione come offset 3d. Per ciascun fotogramma, viene passato un attributo offset diverso (possibilmente interpolato) per ciascun vertice, applicato allo stesso vertice ogni fotogramma chiave.
- Indici: memorizzare i fotogrammi chiave come vertici assoluti e accedervi tramite l'indicizzazione, utilizzando un diverso set di vertici per ogni fotogramma chiave. Trovo questo approccio impossibile, dal momento che non è possibile accedere a fotogrammi chiave adiacenti e quindi non è possibile interpolare tra di loro. Inoltre, sembra una cattiva idea per l'animazione procedurale.
- Texture: potrebbe essere molto elastico, ma suona come una buona soluzione per me. Ancora una volta, l'animazione è pensata come un offset xyz per ciascun vertice. Ogni fotogramma chiave può essere memorizzato in una trama 1D in cui la dimensione viene mappata su verticeID. Se non sbaglio, in OpenGL 4.0 puoi accedere alle trame da qualsiasi shader, in modo da poter leggere questa trama dallo shader di vertice e applicare ogni trasformazione del vertice. Una trama 2D può contenere diversi fotogrammi. Esegui ancora l'interpolazione (e se l'interpolazione funziona per trame esterne allo shader di frammenti, di cui non sono sicuro, puoi interpolare linearmente gratuitamente!) Questo potrebbe essere applicato a sistemi di animazione più complessi come l'animazione ossea senza troppi sforzi.
Sto pensando troppo a questo? Qualcuno può fare luce?