OpenGL: Bone Animation, Зачем мне нужна обратная поза привязки при работе с графическим процессором?
Я реализовал загрузчик MD5 с программной оболочкой. Позиция привязки в md5 является окончательной, абсолютной позицией и поворотами, вам просто нужно сделать вычисления для весов, которые зависят друг от друга.
Я пытался реализовать скины GPU, но я застрял в точке. Поскольку эти координаты являются окончательными, почему я не могу просто преобразовать мои 3d-векторы и кватернионы в матрицу и просто загрузить их в шейдер? Как я прочитал здесь: http://3dgep.com/?p=1356, мне нужно умножить мой скелет на обратную позу привязки. Но я не понимаю эту часть, потому что я всегда думал, что единственное, что мне нужно сделать, это загрузить окончательные матрицы в графический процессор и вычислить остальное там (сумма весов и т. Д. И т. Д.)
Можете ли вы объяснить мне поведение обратной позы связывания?
2 ответа
Как первоначальный автор этой статьи, я попытаюсь объяснить, что делает умножение на позу обратного связывания:
"Обратная поза связывания" в основном "отменяет" любое преобразование, которое уже применено к вашей модели в ее позе связывания.
Рассмотрим это так: если вы примените единичную матрицу к каждому соединению в модели, то вы получите вашу модель в позе связывания (вы можете попробовать это, отправив каркасный кадр, заполненный единичными матрицами. Если результатом будет привязка ставьте, значит вы все делаете правильно).
Если вы примените матрицы позы связывания (неинвертированные) к каждому соединению в модели, то вы получите спагетти, потому что вы примените позу связывания дважды!
Таким образом, чтобы исправить модель спагетти, вы просто умножаете полученные совместные преобразования на обратную позу связывания, чтобы "отменить" преобразование, которое уже применено к вашей модели.
Я надеюсь, что это немного прояснит...
Честно говоря, статья - это много, чтобы полностью проработать. Кажется, что матрицы обратной связи связывания используются для преобразования вершин в локальные системы координат костей.
Это необходимо, потому что преобразования костей являются локальными (относительно их родительских суставов). Таким образом, чтобы оживить вершину, вы должны преобразовать ее в локальную систему координат кости, вычислить локальные преобразования кости и преобразовать ее обратно в мировую систему.