Two.js — это библиотека для создания 2D-графики на JavaScript, ориентированная на векторные объекты и анимацию. Несмотря на то что она в первую очередь работает с 2D, понятие камеры и манипуляции с пространством сцены имеют ключевое значение для построения динамических и интерактивных визуализаций.
В Two.js координатная система сцены основана на стандартной системе координат HTML5 Canvas: точка (0,0) находится в верхнем левом углу. Все объекты сцены имеют свойства position, rotation и scale, которые задают их положение, ориентацию и масштаб относительно этой системы координат.
Концепция камеры в Two.js реализована не как отдельный объект, а через трансформации сцены или группы объектов. Для управления обзором используется изменение позиции и масштаба корневого контейнера или групп:
const group = two.makeGroup();
group.add(rectangle);
group.translation.set(100, 50); // смещение всех объектов группы
group.scale = 2; // масштабирование всех объектов
Здесь group.translation имитирует перемещение камеры, а
group.scale — приближение или отдаление сцены. В отличие от
3D-библиотек, нет отдельного Camera объекта — управление
камерой достигается через прямую трансформацию контейнеров.
Панорамирование (перемещение камеры) достигается изменением координат группы:
group.translation.x += 10; // сдвиг вправо
group.translation.y -= 5; // сдвиг вверх
Масштабирование сцены задаёт эффект приближения или удаления:
group.scale = 1.5; // приближение сцены в 1.5 раза
Важно учитывать, что масштабирование влияет на все дочерние элементы группы, включая их размеры, толщину линий и радиусы кривых.
Трансформации в Two.js происходят относительно центра
объекта или центра группы, что критично при
имитации камеры. Для точного контроля центра используется свойство
origin:
group.center();
group.translation.set(two.width / 2, two.height / 2);
Метод center() автоматически вычисляет центр всех
объектов группы и выравнивает его в точку (0,0). Это позволяет легко
реализовать вращение и масштабирование вокруг центра сцены, имитируя
движение камеры в пространстве.
Движение камеры в Two.js часто реализуется через анимацию свойств
translation и scale. Использование
встроенного метода two.update() обеспечивает плавное
обновление сцены при каждом кадре:
two.bind('upd ate', function(frameCount) {
group.translation.x = Math.sin(frameCount * 0.05) * 100;
group.scale = 1 + 0.5 * Math.sin(frameCount * 0.02);
}).play();
Такой подход позволяет создавать эффекты панорамирования, зумирования и следования камеры за объектом.
Для сложных сцен удобно использовать несколько групп, каждая из которых выступает как отдельный слой. Камера может управлять одной группой, оставляя остальные неподвижными, что полезно для создания параллакса:
const background = two.makeGroup();
const foreground = two.makeGroup();
background.translation.se t(-50, 0); // медленное движение фона
foreground.translation.set(0, 0); // камера на переднем плане
Таким образом, камера на уровне группы позволяет легко управлять глубиной и скоростью движения объектов.
two.bind('update'), чем
изменять координаты объектов по отдельности.В Two.js камера — это концептуальная модель, реализованная через трансформацию групп и контейнеров. Панорамирование, масштабирование и вращение достигаются изменением свойств translation, scale и rotation группы. Правильная организация объектов и слоев позволяет создавать сложные сцены с эффектами движения камеры и динамическим масштабированием, полностью контролируя видимую область сцены.