2013-08-22 14 views
11

Desidero animare un modello (ad esempio un uomo che cammina) in OpenGL. So che c'è roba come scheletro-animazione (con la matematica difficile), ma per quanto riguarda questo ....Come animare un modello 3d (mesh) in OpenGL?

  1. creare un modello in Blender
  2. Creare uno scheletro per quel modello in Blender
  3. Ora fare un'animazione a piedi in Blender con quel modello e scheletro
  4. Prendete un po ' "fotogrammi chiave" di quel animazione e esportare ogni "fotogramma chiave" come un unico modello (ad esempio come obj file)
  5. Fai loader di file oBJ per OpenGL (per ottenere vertici, texture, dati normali e volti)
  6. Utilizzare un VBO per disegnare quel modello animato in OpenGL (e ottenere alcune idee difficili come cambiare il "fotogramma chiave" corrente/modello della VBO ... forse qualcosa con glMapBufferRange

Ok, so che questa idea è solo una piccola sceneggiatura, ma vale la pena guardare oltre? Qual è un buon concetto per cambiare i "keyFrame"/modelli nel VBO?

So che problema di memoria, ma con i modelli piccoli (e non troppe animazioni) si potrebbe fare, credo.

risposta

8

Sì, il metodo a cui ti riferisci era molto popolare nei primi videogiochi 3D (terremoto, ecc.).

Suggerirei di implementarlo in modo leggermente diverso da quello che hai descritto. Invece di esportare un fotogramma chiave per ogni possibile fotogramma di animazione. Esportare più chiavi sparse e interpolare le posizioni dei vertici. Ciò consentirà una riproduzione molto più fluida con un utilizzo della memoria significativamente inferiore.

Ciò richiederebbe un solo VBO (streaming o dinamico). Ogni fotogramma si trova il fotogramma chiave precedente e successivo, interpola i vertici e carica il risultato nel VBO.

In realtà è possibile impostare il frullatore per esportare ogni fotogramma di una scena come OBJ. Uno strumento personalizzato potrebbe quindi compilare questi file in un bel formato di animazione.

leggere qui:

+3

Per essere onesti, l'attuazione del presente interpolazione dei fotogrammi chiave su un livello di vertice è probabilmente un sacco di più sforzo, che imple menting di un sistema di animazione scheletrico. L'animazione scheletrica non veniva eseguita nei "vecchi" giorni, perché alla CPU mancava la potenza per eseguire tutte quelle trasformazioni aggiuntive dei vertici. Ma le GPU di oggi scricchiolano quella matrice aggiuntiva e l'interpolazione per la colazione e anche il codice in GLSL è molto meno. – datenwolf

+0

@datenwolf Sono d'accordo con te sulle prestazioni, ma non sono d'accordo sulla facilità di implementazione dell'animazione scheletrica. L'interpolazione verticale è 'per i verts [i] = lerp (t, precedente [i], successivo [i])}' In confronto alla slerping di una gerarchia di quaternioni, con relazioni e lunghezze, (quella parte non male) ma poi devi associare i vertici con pesi ossei. Sono solo molti più dati da gestire. –

+1

thx per la risposta veloce! – user2602528