К примеру, как передвигать модель персонажа и при этом синхронизировать его перемещение с анимацией ходьбы, чтобы опорная нога не скользила по поверхности, а оставалась на месте до следующего шага?
Вроде есть путь, по которому его нужно провести, сама модель и ландшафт. Но только как ориентировать его в нужную сторону? Если бы он направлялся по прямой, то можно было бы просто ориентировать его в сторону конечной точки. Но ведь путь - это ломаная кривая, так что по пути от одной точки до другой в таком случае он ходил бы боком.Можно предположить, что, когда он достигнет одной опорной точки, достаточно повернуть модель в сторону следующей опорной точки. Но и это не даст нужного эффекта: персонаж будет разворачиваться слишком резко. После долгих экспериментов и поиска решений я остановился на следующем (How to move objects along a spline): от начальной до конечной точки можно нарисовать кривую Безье, заставить персонажа двигаться по ней и смотреть себе под ноги, то есть быть направленным в следующую точку кривой. Так получится плавный проход по всем звеньям маршрута (с багами в некоторых случаях, но не будем об этом).
Победа! Но есть одно "но". Анимации в Three.js не проигрываются сами по себе, даже будучи запущенными внутри игрового цикла. Их нужно проводить самому, мол, любезная анимация, давай сделаем вид, что ты уже в точке 15%. И для этого обычно используется вспомогательный объект Clock. "Но" заключается в том, что он приостанавливает стрелки, если ресурсов не хватает. Так что вертеть камерой в момент передвижения не получится. Это несомненно полезно для анимации каких-то второстепенных моделей, частотой обновления которых можно пожертвовать для производительности, но не для модели игрока. Для того, чтобы сделать задачу продвижения анимации супер-приоритетной, пришлось вынести эту логику внутрь web worker'а. Анимация перемещения по кривой