Название: Синхронизация анимаций Отправлено: 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, это время лапок. Или все-таки можно как-то "прямым доступом" без накопления пути? (я не вижу как) Прелесть таких задачек в том что гугл не помогает - ну в самом деле, что искать-то? :) |