2013-08-22 14 views
11

Chcę animować model (na przykład człowieka, chodzenie) w OpenGL. Wiem, że nie ma rzeczy jak szkielet-animacji (ze skomplikowanej matematyki), ale co z tego ....Jak animować model 3d (siatkę) w OpenGL?

  1. Tworzenie modelu w Blenderze
  2. utworzyć szkielet dla tego modelu w Blenderze
  3. teraz zrobić animacja chodzenia w Blenderze z tego modelu i szkielet
  4. Poświęć trochę „Klatki kluczowe” tej animacji i eksportowania każdego „klatka kluczowa” jako jednego modelu (na przykład jako obj pliku)
  5. Złóż ładującego pliku OBJ OpenGL (aby uzyskać dane wierzchołków, tekstur, normalnych i powierzchni)
  6. Użyj VBO wyciągnąć ten animowany model w OpenGL (i trochę skomplikowane pomysły jak zmienić aktualny „klatka kluczowa”/model w VBO ... Może coś z glMapBufferRange

Ok, wiem, że ten pomysł to tylko mały scenariusz, ale czy warto zajrzeć dalej? Co to jest dobry pomysł, aby zmienić "keyFrame"/modele w VBO?

Znam ten problem z pamięcią, ale przy małych modelach (i niezbyt wielu animacjach) można to zrobić, jak sądzę.

Odpowiedz

8

Tak, metoda, do której się odnosiłeś, była bardzo popularna we wczesnych grach wideo 3D (trzęsienie itp.).

Sugerowałbym wdrożenie go nieco inaczej niż opisałeś. Zamiast eksportować klatkę kluczową dla każdej możliwej klatki animacji. Eksportuj więcej rozłożonych klawiszy i interpoluj pozycje wierzchołków. Pozwoli to na znacznie płynniejsze odtwarzanie przy znacznie mniejszym zużyciu pamięci.

Wymagałoby to tylko jednego (streaming lub dynamiczny) VBO. W każdej klatce znajdziesz poprzednią i następną klatkę kluczową, interpoluj wierzchołki i prześlij wynik do VBO.

Można tak skonfigurować mikser, aby eksportował każdą ramkę sceny jako OBJ. Niestandardowe narzędzie może następnie skompilować te pliki do ładnego formatu animacji.

przeczytać tutaj:

+3

Aby być uczciwym, wdrożenie tej klatki kluczowej niego animację na poziomie wierzchołków jest prawdopodobnie dużo więcej wysiłku, niż wykonać opracowanie systemu animacji szkieletu. Animacja szkieletu nie została wykonana w "starych" czasach, ponieważ procesorowi brakowało mocy do wykonania wszystkich dodatkowych transformacji wierzchołków. Ale dzisiejsze procesory graficzne chrupią tę dodatkową matrycę i interpolację na śniadanie, a także w GLSL jest o wiele mniej kodu. – datenwolf

+0

@datenwolf Zgadzam się z tobą na temat wydajności, ale nie zgadzam się co do łatwości implementacji animacji szkieletu. Animacja wierzchołków to 'dla i verts [i] = lerp (t, previous [i], next [i])}' W porównaniu do zrzucania hierarchii kwaternionów, relacji i długości (ta część nieźle), ale potem musisz powiązać wierzchołki z wagami kości. To tylko o wiele więcej danych do zarządzania. –

+1

thx za szybką odpowiedź! – user2602528