Добрый день
Есть 2 анимации (A1 и A2). Для простоты пусть они имеют всего 1 канал: позиции объекта записанные по кадрам, напр
C++ (Qt)
typedef std::vector<QVector3D> TAnimation;
Также полагаем что A1[0] == A2[0]. Никаких др допущений делать нельзя - путь может быть по прямой или (какой угодно) кривой, число кадров может быть разным (A1.size() != A2.size()) и.т.п.
Задача 1: получить "среднюю" анимацию из 2 исходных. Ну тут вроде все ясно
C++ (Qt)
// время = среднему времени исходных
TAnimation A3((A1.size() + A2.size()) / 2);
for (size_t i = 0; i < A3.size(); ++i) {
size_t i1 = size_t(float(i) / A3.size() * A1.size()); // индекс кадра в A1
size_t i2 = size_t(float(i) / A3.size() * A2.size()); // индекс кадра в A2
A3[i] = A1[i1] * 0.5f + A2[i2] * 0.5f;
}
Правда тут надо (или точнее) получить флоат значения i1 и i2 и затем интерполироваться между исходными кадрами - ну это чисто "дело (несложной) техники", эти подробности опускаем.
Задача 2: получить "переход" анимацию, т.е. итоговая A3 должна начинаться как A1 и плавно перетекать в A2. Оба-на! (или "упс!" как сейчас говорят). Я не знаю как это сделать. Время A3 тоже равно среднему? Почему? Ну и просто так взвешиваться аналогично предыдущей задаче (подставляя др значения вместо 0.5f) - очевидно неверно.
Ну да, надо гуглить (а не на форуме спрашивать!). Но позвольте, вся "теория" здесь явно в рамках физики 8-го класса (даже не 10-го), неужели нет решения "из головы", обязательно надо лазить? Или я просто туплю и не вижу очевидного? И если уж гуглить, то что искать-то?
В общем, вопрос: думать или гуглить?
Спасибо