Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Февраль 05, 2020, 11:36



Название: Смешивание анимаций
Отправлено: Igors от Февраль 05, 2020, 11:36
Добрый день

Есть 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-го), неужели нет решения "из головы", обязательно надо лазить? Или я просто туплю и не вижу очевидного? И если уж гуглить, то что искать-то?

В общем, вопрос: думать или гуглить?

Спасибо