2013-06-15 8 views
5

Zaimplementowałem program ładujący MD5 z oprogramowaniem do skórowania. Pozycja bind w md5 jest ostateczna, absolutna pozycja i rotacje, wystarczy wykonać obliczenia dla odważników, które są zależne od stawów.OpenGL: Animacja kości, dlaczego potrzebuję odwrotności ułożenia podczas pracy z GPU?

Próbowałem zastosować skórkę GPU, ale utknąłem w punkcie. Ponieważ te współrzędne są ostateczne, dlaczego nie mogę po prostu przekształcić moich trójwymiarowych wektorów i kwaternionów w macierz i po prostu przesłać je do modułu cieniującego? Jak czytałem tutaj: http://3dgep.com/?p=1356, potrzebuję pomnożyć mój szkielet z odwrotnością wiążącej pozy. Ale nie rozumiem tej części, ponieważ zawsze uważałem, że jedyną rzeczą, którą muszę zrobić, to załadować ostateczne macierze do GPU i obliczyć resztę (suma wag itd.).

Czy możesz wyjaśnić mi zachowanie wiązania odwrotnego?

Odpowiedz

5

Szczerze mówiąc, artykuł jest trochę za dużo, aby całkowicie przejść przez. Wydaje się, że macierze odwrotnej macierzy pozornej są używane do transformacji wierzchołków do miejscowych układów współrzędnych kości.

Jest to konieczne, ponieważ transformacje kości są lokalne (w stosunku do ich połączeń macierzystych). Aby więc animować wierzchołek, musisz przekształcić go w miejscowy układ współrzędnych kości, obliczyć lokalne transformacje kości i przekształcić je z powrotem w system globalny.

+0

W tym czasie myślę, że zrozumiałem, o co w tym wszystkim chodzi. Przesyłamy już wierzchołki bind-pose, wszystko, czego potrzebuję, aby je przekształcić i zgodnie z aktualnym szkieletem. Ponieważ wszystkie moje wierzchołki znajdują się już w przestrzeni świata, potrzebuję przekształcić moje nowe macierze absolutne szkieletu w przestrzeń wspólną, ponieważ potrzebuję przesunięcia, a następnie pomnożenie wyniku przez moje wierzchołki, na koniec pomnożenie przez macierz widoku modelu. – deniz

10

Jako oryginalnego autora tego artykułu, postaram się wyjaśnić, co pomnożenie przez odwrotność wiążą stanowią robi:

W „odwrotny wiążą stwarzać” w zasadzie „cofa” żadnej transformacji, która już została zastosowana do modelu w swojej pozie wiążącej.

Rozważmy to tak: Jeśli zastosujesz matrycę tożsamości do każdego połączenia w modelu, otrzymasz model w pozycji wiążącej (możesz spróbować tego, wysyłając ramkę szkieletu wypełnioną macierzami tożsamości. jakie są wyniki wiązania, a następnie robisz to dobrze).

Jeśli zastosujesz matryce bind (nieodwrócone) do każdego jointa w modelu, otrzymasz spaghetti, ponieważ dwa razy użyjesz bind position!

Aby naprawić model spaghetti, należy po prostu pomnożyć wynikowe przekształcenia wspólne przez odwrotną pozycję wiązania, aby "cofnąć" transformację, która została już zastosowana w modelu.

Mam nadzieję, że to trochę wyjaśni ...

+1

+1, wizualizacja mojego modelu jako spaghetti rozśmieszyło mnie. –