Как оценить полиномиальные коэффициенты для сплайна канала анимации?

Я реконструирую файлы анимации видеоигр и столкнулся с кирпичной стеной. Наборы анимации структурированы следующим образом:

Для каждого набора анимации:

  • Название набора анимации: Атака
  • Количество костей: 22
  • Продолжительность: 1.03333

и впоследствии для каждой кости в наборе:

  • Название кости: Таз
  • Идентификатор кости: 0
  • Ключевой интервал: 0,0333333
  • Ключи: 31

а затем следующие данные разбиваются на 7 каналов (Position[x,y,z] и Rotation quaternion[x,y,z,w]):

Position[x,y,z] являются либо постоянными, либо исходными значениями, и у меня здесь нет проблем.

Но каналы кватерниона вращения [x, y, z, w] интерпретируются как сплайны с N сегментами и N коэффициентами, и мне трудно понять, как именно я буду оценивать сплайны в данных, которые я могу вставить в 3D-программу.

Я знаю, что сплайн каждого канала построен так, что Y и X равны нормализованному времени (от 0 до 1).

Этот Q + A ( Оценка полиномиальных коэффициентов ) кажется мне нужным:

Многочленом степени n с коэффициентами a0, a1, a2, a3........an называется функция

p(x)= a0+a1*x+a2*x^2+a3*x^3+.....+an*x^n

и написан как код Python:

def poly(lst, x): 
  n, tmp = 0, 0
  for a in lst:
    tmp = tmp + (a * (x**n))
    n += 1

  return tmp

Но я не уверен, что правильно делаю, когда ставлю lst в качестве коэффициентов для каждого сегмента и x = Duration / Keys.

Вот канал 'Rot.x' первого набора анимаций, его сегменты и коэффициенты:

Сегменты = 3

Сегмент 1

  • Коэфф1: 0,0198117
  • Коэфф2: 0,00826611
  • Коэфф3: 0,0521381
  • Коэфф4: -0,00210184

Сегмент 2

  • Коэфф1: -0,181324
  • Коэфф2: 1,09073
  • Коэфф3: -1,77627
  • Коэфф4: 0,920407

Сегмент 3

  • Коэфф1: -0,0335189
  • Коэфф2: 0,265863
  • Коэфф3: -0,359457
  • Коэфф4: 0,147228

Я смотрю на это так: каждый сегмент составляет 1/3 продолжительности (1,03333), и, кроме того, коэффициенты каждого сегмента должны оцениваться по 1/3 числа ключей (31), но вывод с использованием вышеуказанного poly(lst, x) функция для

  • сегмент 1 = от 0,019 до 4,90 до -7,15
  • сегмент 2 = от -0,18 до 20985,41
  • сегмент 3 = от -0,03 до 3296,11

Очевидно, я делаю что-то не так, так как выход слишком высок.

Любая помощь будет принята с благодарностью!


person Hussien Hussien    schedule 21.11.2014    source источник
comment
Есть ли у вас данные для других компонентов кватерниона (y, z, w)?   -  person Rufflewind    schedule 26.11.2014
comment
Кроме того, я действительно не вижу проблемы, с которой вы столкнулись. Мне кажется, что сюжет неплохой. Однако я не думаю, что сегменты разделены на трети поровну.   -  person Rufflewind    schedule 26.11.2014