ПрограммированиеФорумГрафика

SMD анимация : ( Ни как не получается. (Решено - осталось несколько вопросов)) (5 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
#60
0:13, 23 июля 2009

Не, доделаю SMD.

Я пошёл другим путём - отразил Z координатуи повернул модель по Х на 90 градусов - отображается абсолютно корректно
Теперь мутил с анимацией.. дошёл до того, чтовроде анимация костей правильная НО все кости какбы повёрнуты на 90 градусов вдоль оси Х (ну не вдоль Глобальной а вдоль локальной оси Х)  правда умножением на матрицу поворота на -1.57 градусов не помогло (я не умножаю кость с ID==0 т.к. я её и так повернул! и она теперь стоит как надо)

Мож я не туда умножаю? мозг взорвался. 

Ещё раз просчёт мировой матрицы кости:

WorldMatrix = ParentWorldMatrix * (BaseMatrix * LocalMatrix);

где:
ParentWorldMatrix - мировая матрица родительской кости
BaseMatrix - инвертированная матрица нулевого кадра.
LocalMatrix - нынешняя матрица из ленты анимации  (у контрорллера анимации продвигается на deltaTime время и интерполированные матрицы выставляются для каждой кости)

Умножал так:
WorldMatrix = ParentWorldMatrix * (BaseMatrix * LocalMatrix) * Matrix.RotationX(-1.57f);

#61
10:55, 23 июля 2009

по поводу smd, может не конвертировал поли в трианглы, изза этого анимация может сбится

#62
14:44, 23 июля 2009

не. дело именно в матрицах

#63
15:03, 23 июля 2009

о! ага  матрицы нулевого кадра, которые я инвертирую, тоже надо иерархически перемножить? так ни где не написано но подумав пришёл к такому выводу.

#64
16:17, 23 июля 2009

*радостные визги*  ААА СДЕЛАЛ!!! : )  всем спасибо, разобрался с работой СМД скелетки!

#65
17:05, 23 июля 2009

heihachi
Ну наконец-то - поздравляю. Сам догнал.

#66
21:23, 23 июля 2009

ага, спасиб. у меня всегда так - пока сам не разберусь ни чего не сделаю.  ну теперь точно  скоро альфа релиз двига и демка, а то без анимации как то не ЖЪР

#67
14:41, 24 июля 2009

Теперь другой вопрос.

Мне нужно смешать несколько треков анимации.
Правильно ли я понимаю, как это сделать?  - вот:
У каждого трека есть "вес" (как и у костей)
Получаем матрицы трансформаций от каждого трека на текущий момент (интерполированные)
Умножаем эти матрицы на вес самого трека.
Так делаем для каждого трека..


(предположим в треках по 5 костей)

Track1:  t1M1, t1M2, t1M3, t1M4, t1M5

Track2:  t2M1, t2M2, t2M3, t2M4, t2M5

полученные матрицы перемножаем так:

M1 = t1M1 * t2M1;
M2 = t1M2 * t2M2;
M3 = t1M3 * t2M3;
M4 = t1M4 * t2M4;
M5 = t1M5 * t2M5;

матрицы M1,M2, M3... ит.д.  юзаем уже в шейдере

Так или нет?

#68
15:56, 24 июля 2009

Юзай кватернион же. Между кадрами сферически интерполируй, преобразуй в матрицу и в шейдер.

#69
16:39, 24 июля 2009

Blew_zc
то что кватернионы интерполировать быстрее - то я знаю, я так и сделаю, мне вообще принцип понять.
вот ТАКИМ дубовым методом я правильно "сделал"?  умножать матрицы помноженные на веса? Новедь с разным порядком умножения - разная анимация получится! не?

#70
16:43, 24 июля 2009

Blew_zc
> сферически интерполируй
о_О  эт как?

#71
16:50, 24 июля 2009

И что получется когда скаляр на вектор умножать?
Юзай поиск по сайту. Сферическая интерполяция по-моему в факе есть.

#72
16:53, 24 июля 2009

как вариант - передавать в шейдер 2 ключевых кадра, посчитать для них две позиции вершины и линейно проинтерполировать. но это совсем фэил

#73
17:19, 24 июля 2009

Blew_zc
> Юзай поиск по сайту. Сферическая интерполяция по-моему в факе есть.
прочёл, понял, спасибо  (да,линейно както не труЪ. )

получается что для каждой кости я должен хранить кватернион поворота и вектор смещения?
потом:  интерполируемвектор смещения, интерполируем кватернион и из этого строим матрицу, так?

#74
21:37, 24 июля 2009

именно

Страницы: 1 2 3 4 5 6 7 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.