2013-08-22 18 views
11

Ich möchte ein Modell (z. B. ein Mensch, Gehen) in OpenGL animieren. Ich weiß, es gibt Sachen wie Skelett-Animation (mit kniffligen Mathe), aber was ist das ....Wie animiert man ein 3D-Modell (Mesh) in OpenGL?

  1. ein Modell in Blender erstellen
  2. erstellen ein Skelett für das jeweilige Modell in Blender
  3. Jetzt tun ein wandelndes Animation in Blender mit diesem Modell und Skelett
  4. einige „Schlüsselbilder“ dieser Animation nehmen und jedes „Keyframe“ als ein einziges Modell (zum Beispiel als OBJ-Datei)
  5. Machen Sie eine OBJ-Datei loader für OpenGL exportieren (um Vertex-, Textur-, Normal- und Gesichtsdaten zu erhalten)
  6. Verwenden Sie ein VBO, das animierte Modell in OpenGL zu zeichnen (und einige kniffligen Ideen bekommen, wie das aktuelle „Keyframe“ ändern/Modell in der VBO ... vielleicht etwas mit glMapBufferRange

Ok, ich weiß, diese Idee ist nur ein kleines Skript, aber lohnt es sich weiter zu schauen? Was ist ein gutes Konzept, um die "keyFrame"/Modelle in der VBO zu ändern?

Ich kenne dieses Speicherproblem, aber mit kleinen Modellen (und nicht zu viel Animationen) könnte es getan werden, denke ich.

Antwort

8

Ja, die Methode, auf die Sie sich beziehen, war sehr beliebt in frühen 3D-Videospielen (Beben usw.).

Ich würde vorschlagen, es etwas anders als Sie beschrieben implementieren. Anstatt einen Keyframe für jeden möglichen Animationsrahmen zu exportieren. Exportieren Sie weitere ausgebreitete Schlüssel und interpolieren Sie die Eckpunktpositionen. Dies ermöglicht eine wesentlich flüssigere Wiedergabe mit deutlich weniger Speicherverbrauch.

Dies würde nur eine einzige (Streaming oder dynamische) VBO erfordern. In jedem Frame finden Sie die vorherigen und nächsten Keyframes, interpolieren die Scheitelpunkte und laden das Ergebnis in den VBO hoch.

Sie können Blender tatsächlich so einrichten, dass jeder Frame einer Szene als OBJ exportiert wird. Ein benutzerdefiniertes Tool könnte diese Dateien dann in ein nettes Animationsformat zusammenstellen.

hier lesen:

+3

ehrlich zu sein, auf einem Vertex-Level in diesem Keyframe tweening Implementierung ist wahrscheinlich eine Menge mehr Aufwand, als implementieren ein Skelettanimationssystem zu entwickeln. Skelettanimation wurde nicht in den "alten" Tagen gemacht, weil CPUs die Pferdestärken fehlten, um all diese zusätzlichen Vertextransformationen durchzuführen. Aber die heutigen GPUs knacken diese zusätzliche Matrix und Interpolation für das Frühstück und es ist auch viel weniger Code in GLSL. – datenwolf

+0

@datenwolf Ich stimme dir auf die Performance-Sachen zu, aber ich bin anderer Meinung über die Leichtigkeit der Implementierung von Skelettanimation. Vertex-Tweening ist 'für i verts [i] = lerp (t, vorheriger [i], nächster [i])}' Im Vergleich zu einer Hierarchie von Quaternionen, mit Beziehungen und Längen, (dieser Teil nicht zu schlecht), aber dann müssen Sie Scheitelpunkte mit Knochengewichten verknüpfen. Es sind einfach mehr Daten zu verwalten. –

+1

Danke für die schnelle Antwort! – user2602528

Verwandte Themen