Не, доделаю SMD.
Я пошёл другим путём - отразил Z координатуи повернул модель по Х на 90 градусов - отображается абсолютно корректно
Теперь мутил с анимацией.. дошёл до того, чтовроде анимация костей правильная НО все кости какбы повёрнуты на 90 градусов вдоль оси Х (ну не вдоль Глобальной а вдоль локальной оси Х) правда умножением на матрицу поворота на -1.57 градусов не помогло (я не умножаю кость с ID==0 т.к. я её и так повернул! и она теперь стоит как надо)
Мож я не туда умножаю? мозг взорвался.
Ещё раз просчёт мировой матрицы кости:
WorldMatrix = ParentWorldMatrix * (BaseMatrix * LocalMatrix);
где:
ParentWorldMatrix - мировая матрица родительской кости
BaseMatrix - инвертированная матрица нулевого кадра.
LocalMatrix - нынешняя матрица из ленты анимации (у контрорллера анимации продвигается на deltaTime время и интерполированные матрицы выставляются для каждой кости)
Умножал так:
WorldMatrix = ParentWorldMatrix * (BaseMatrix * LocalMatrix) * Matrix.RotationX(-1.57f);
по поводу smd, может не конвертировал поли в трианглы, изза этого анимация может сбится
не. дело именно в матрицах
о! ага матрицы нулевого кадра, которые я инвертирую, тоже надо иерархически перемножить? так ни где не написано но подумав пришёл к такому выводу.
*радостные визги* ААА СДЕЛАЛ!!! : ) всем спасибо, разобрался с работой СМД скелетки!
heihachi
Ну наконец-то - поздравляю. Сам догнал.
ага, спасиб. у меня всегда так - пока сам не разберусь ни чего не сделаю. ну теперь точно скоро альфа релиз двига и демка, а то без анимации как то не ЖЪР
Теперь другой вопрос.
Мне нужно смешать несколько треков анимации.
Правильно ли я понимаю, как это сделать? - вот:
У каждого трека есть "вес" (как и у костей)
Получаем матрицы трансформаций от каждого трека на текущий момент (интерполированные)
Умножаем эти матрицы на вес самого трека.
Так делаем для каждого трека..
(предположим в треках по 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... ит.д. юзаем уже в шейдере
Так или нет?
Юзай кватернион же. Между кадрами сферически интерполируй, преобразуй в матрицу и в шейдер.
Blew_zc
то что кватернионы интерполировать быстрее - то я знаю, я так и сделаю, мне вообще принцип понять.
вот ТАКИМ дубовым методом я правильно "сделал"? умножать матрицы помноженные на веса? Новедь с разным порядком умножения - разная анимация получится! не?
Blew_zc
> сферически интерполируй
о_О эт как?
И что получется когда скаляр на вектор умножать?
Юзай поиск по сайту. Сферическая интерполяция по-моему в факе есть.
как вариант - передавать в шейдер 2 ключевых кадра, посчитать для них две позиции вершины и линейно проинтерполировать. но это совсем фэил
Blew_zc
> Юзай поиск по сайту. Сферическая интерполяция по-моему в факе есть.
прочёл, понял, спасибо (да,линейно както не труЪ. )
получается что для каждой кости я должен хранить кватернион поворота и вектор смещения?
потом: интерполируемвектор смещения, интерполируем кватернион и из этого строим матрицу, так?
именно
Тема в архиве.