OrbitControls — это мощный инструмент для управления
камерой в сцене Three.js. Он позволяет вращать, масштабировать и
панорамировать камеру вокруг целевой точки. Чтобы создавать удобные и
безопасные интерактивные сцены, важно понимать, как настроить
ограничения и параметры OrbitControls.
OrbitControls предоставляет несколько ключевых свойств,
отвечающих за ограничения вращения камеры:
minAzimuthAngle и
maxAzimuthAngle Определяют границы горизонтального
вращения камеры.
controls.minAzimuthAngle = -Math.PI / 4; // минимальный угол влево
controls.maxAzimuthAngle = Math.PI / 4; // максимальный угол вправо
Ограничение азимута полезно, когда сцена должна оставаться в пределах определённого поля обзора, например, для моделей или интерактивных презентаций.
minPolarAngle и
maxPolarAngle Контролируют вертикальное вращение
камеры (подъём и наклон).
0 соответствует положению прямо над целью (сверху),
Math.PI — прямо под целью (снизу).controls.minPolarAngle = Math.PI / 6; // минимальный угол вниз
controls.maxPolarAngle = Math.PI / 2; // максимальный угол вверх
Это предотвращает «переворот» камеры и нежелательные виды снизу или сверху.
Управление приближением камеры через OrbitControls
регулируется следующими параметрами:
minDistance и
maxDistance Определяют минимальное и максимальное
расстояние камеры до целевой точки:
controls.minDistance = 5;
controls.maxDistance = 50;
Это особенно важно для предотвращения выхода камеры за пределы сцены или столкновений с объектами.
enableZoom Логическое свойство,
разрешающее или запрещающее масштабирование:
controls.enableZoom = true; // включить масштабирование
controls.enableZoom = false; // отключить масштабированиеПанорамирование (panning) управляет смещением камеры без
вращения. Основные настройки:
enablePan Включает или отключает
возможность панорамирования:
controls.enablePan = true;
controls.enablePan = false;panSpeed Определяет скорость
панорамирования относительно перемещения мыши:
controls.panSpeed = 1.0; // стандартная скоростьЧувствительность вращения и масштабирования регулируется следующими свойствами:
rotateSpeed — скорость вращения
камеры:
controls.rotateSpeed = 1.2;zoomSpeed — скорость
приближения/удаления камеры:
controls.zoomSpeed = 1.0;dampingFactor — коэффициент
плавности движения камеры при включенном enableDamping:
controls.enableDamping = true;
controls.dampingFactor = 0.05;Для некоторых задач требуется зафиксировать вращение вокруг
определённых осей. Можно использовать комбинацию min/max
углов и ограничение с enableRotate:
controls.enableRotate = true;
controls.minPolarAngle = Math.PI / 3; // фиксирование вертикального диапазона
controls.maxPolarAngle = Math.PI / 3;
controls.minAzimuthAngle = 0; // горизонтальный фиксированный угол
controls.maxAzimuthAngle = 0;
В результате камера будет вращаться только в пределах заданного диапазона или оставаться зафиксированной.
Ограничения должны согласовываться с типом камеры:
PerspectiveCamera требует тщательной настройки
minDistance и maxDistance.OrthographicCamera лучше использовать с ограничением
панорамирования через screenSpacePanning.При работе с динамическими сценами стоит регулярно обновлять
controls.target, чтобы вращение происходило вокруг
актуального центра интереса:
controls.target.set(0, 1, 0);
controls.update();
enableDamping.maxDistance, чтобы избежать выхода камеры за
пределы сцены.minPolarAngle и maxPolarAngle,
чтобы пользователь не видел модель «снизу».rotateSpeed и zoomSpeed для
сенсорного управления.Эти настройки позволяют создавать гибкое и предсказуемое поведение камеры в Three.js, обеспечивая контроль над движением пользователя, защиту от нежелательных положений камеры и улучшая пользовательский опыт при интерактивной визуализации.