У меня в моей программе работала скелетная анимация, но я интерполировал матрицы 4x4 , хранящиеся для каждой кости между кадрами, линейным образом, т.е.
bMatrix bMathbMathInterpolate(bMatrix const * const p_a,bMatrix const * const p_b, float p_delta)
{
bMatrix l_mat;
for(unsigned char i = 0;i lessthan (edit: sorry less than symbol break it) 16;i++)
l_mat.m_values[i] = bMathInterpolate(p_a->m_values[i], p_b->m_values[i], p_delta);
return l_mat;
}
Что такое О.К. если, конечно, в матрице нет большого поворота - модель становится слегка раздавленной между ключевыми кадрами.
Итак, я создал отдельный алгоритм интерполяции, который преобразует только матрицу вращения матрицы 4x4 в кватернион, выполняет SLERP и заменяет только вращающуюся часть матрицы с матричной версией кватерниона. Для части перевода матрицы я просто интерполировал ее линейным способом.
Глядя на результаты, это явно неправильно !!! : '(
Если вы понимаете все это очень хорошо (в отличие от меня), вы, вероятно, думаете: «Нет! Это не то, как вы это делаете!» - если так, пожалуйста, скажите мне, что я делаю не так !!
Я не знаю, что делать с переводческой частью матрицы, потому что я могу найти только ресурсы, которые подскажут вам, как конвертировать туда и обратно между кватернионом и 3x3 матрицей.
Любая помощь будет высоко ценится !!!!