Russian Qt Forum

Программирование => Алгоритмы => Тема начата: Igors от Октябрь 07, 2019, 13:14



Название: Синхронизация анимаций
Отправлено: Igors от Октябрь 07, 2019, 13:14
Добрый день

Вот получил новую задачу, обдумываю. Пример

- есть модель насекомого, пусть таракана. Она состоит из телв (body) и 6 ног. Юзер строит какой-то путь вдоль которого таракан движется. При этом двигается как тело так и все ноги (они чайлды тела). Ноги имеют еще и собственную анимацию - гнутся в коленях и.т.п., обычно это вращения для каждого компонента ноги. И вот нужно чтобы эта анимация прокручивалась в такт движению. Т.е. чем быстрее он бежит - тем быстрее перебирает лапками, и наоборот. Встал на месте - ну и лапки замерли.

Собсно это вся постановка что я получил :) Формально анимация - это записанные позиция и вращения с шагом по времени (по кадрам).  Все анимации известны/даны (как ведущая так и ведомые). Требуется для заданного времени t найти время ведомой (напр t1)

Спасибо


Название: Re: Синхронизация анимаций
Отправлено: m_ax от Октябрь 07, 2019, 18:03
Цитировать
Т.е. чем быстрее он бежит - тем быстрее перебирает лапками, и наоборот. Встал на месте - ну и лапки замерли.
Ну и возьмите самую простую линейную зависимость: скорость перебирания лапками = k * скорость таракана) А параметр k опытным путём подобрать можно)


Название: Re: Синхронизация анимаций
Отправлено: Igors от Октябрь 09, 2019, 05:59
Ну и возьмите самую простую линейную зависимость: скорость перебирания лапками = k * скорость таракана) А параметр k опытным путём подобрать можно)
И что мне потом делать с этим k? И во что вольются опытные подборки? Опять Вы как-то все запутываете :'(

Мои соображения: очевидно задача определена не полностью. Напр маленькому таракану потребуется 200 шагов чтобы покрыть расстояние 1 метр, а какому-то "тараканищу" (с метровыми лапами) нужно сделать всего пару шагов. Надо как-то задать "крейсерскую скорость" (v). Думаю для этого лучше предложить юзеру ввести диапазон анимации. Напр он указал с кадра 10 по кадр 20, он знает/считает что на этом интервале "нормальное движение". За это время тело передвинулось на метр, значит  "крейсерская скорость" = 0.1 (метров на кадр). Дальше все просто

- известна позиция тела на каждом кадре - значит известен и пройденный им путь S на каждом кадре. К сожалению, его придется хранить вектором и пересчитывать всякий раз когда он изменился. Просто делим его на скорость t1 = S(t) / v, это время лапок. Или все-таки можно как-то "прямым доступом" без накопления пути? (я не вижу как)

Прелесть таких задачек в том что гугл не помогает - ну в самом деле, что искать-то?  :)