forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Скелетная анимация (http://forum.boolean.name/showthread.php?t=11273)

pax 02.12.2009 22:52

Скелетная анимация
 
Есть задача: имеется скелет считанный в виде линейного массива с индексами парентов. Каждый Joint имеет свой offset что дает возможность складывая координаты построить каркасную модель начальной позиции скелета. Есть кадры анимации, записанные локальным вращением для каждого Joint'а. Необходимо для каждого кадра посчитать новую позицию всех Joint'ов.

Подскажите в каком порядке необходимо вести расчеты позиций Joint'ов :rolleyes:

Knightmare 02.12.2009 23:06

Ответ: Скелетная анимация
 
Родитель->дети

pax 03.12.2009 08:35

Ответ: Скелетная анимация
 
Цитата:

Сообщение от Knightmare (Сообщение 128013)
Родитель->дети

Да я понимаю, что родитель->дети, но не получается. В каком порядке применять трансформации к детям и каким образом? Хотябы в двух словах, но не "Родитель->дети" :)

jimon 03.12.2009 08:53

Ответ: Скелетная анимация
 
PAX
у тебя есть локальная матрица трансформации кости, просто перемножаешь локальную матрицу на родительскую глобальную (или родительскую глобальную на локальную, в зависимости какую GAPI кушает матрицу) и получаешь глобальную матрицу кости, ну а дальше идешь по всем детям текущей кости

локальная матрица трансформации это матрица_размера * матрица_поворота * матрица_перемещения

собственно именно по-этому нужно чтобы костная иерархия была деревом, если у нас несколько деревьев то нужно представить "нулевого родителя" с единичной глобальной матрицей (в дереве для главного родителя глобальная матрица = локальная матрица)

ps. вот тут простой код анимации скелета который используется в enesea
http://code.google.com/p/enesea/sour...e/jeSkeleton.h

pax 03.12.2009 09:05

Ответ: Скелетная анимация
 
Спасибо.
Еще вопрос: чтобы расчитать положения костей, необходимо взять их translation компоненту? Мне необходимо нарисовать скелет с помощью точек и линий.

jimon 03.12.2009 09:16

Ответ: Скелетная анимация
 
PAX
вроде как просто нужно домножить глобальную матрицу кости на вектор (0, 0, 0, 1) и получишь точку кости (хотя да, такая операция возвращает translation кости), соединяешь точки линиями исходя из иерархии и всё :)

всё самое интересное когда ты анимацию захочешь :)

pax 03.12.2009 11:05

Ответ: Скелетная анимация
 
Да кадры анимации у меня есть, и мне и надо только скелет :)

А матрица размера это translation или scale матрица?

jimon 03.12.2009 14:59

Ответ: Скелетная анимация
 
PAX
scale

Knightmare 03.12.2009 15:03

Ответ: Скелетная анимация
 
Не забываем, что для корректного скиннинга нам еще необходимо множить вершины на обратную матрицу бинд-позы. А то далее пойдут вопросы типа:
OMG!!! WTF!!! Почему у моего перса голова взорвалась при анимации?!!11адинадин

pax 03.12.2009 20:47

Ответ: Скелетная анимация
 
Спасибо всем, проблему решил, удачно построил каркас скелета, скининг меня пока не интересует :)


Часовой пояс GMT +4, время: 01:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot