TrackballControls — это инструмент для
интерактивного управления камерой в сцене Three.js. В отличие от простых
контроллеров, таких как OrbitControls, TrackballControls
предоставляет более гибкое и естественное вращение камеры вокруг
объекта, с эффектом «вращения шара», позволяя реализовать динамичные и
реалистичные интерфейсы навигации. Он полезен при работе с 3D-моделями,
визуализацией данных и сценами, где требуется полный контроль над
положением и ориентацией камеры.
TrackballControls не включён в основной пакет Three.js и
импортируется из модуля
examples/jsm/controls/TrackballControls.js.
import * as THREE from 'three';
import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 5);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const controls = new TrackballControls(camera, renderer.domElement);
При инициализации необходимо передать два параметра: камеру и DOM-элемент рендерера. Камера будет управляться контроллером, а DOM-элемент отвечает за обработку событий мыши и касания.
TrackballControls имеет ряд ключевых свойств, которые определяют поведение камеры:
rotateSpeed — скорость вращения камеры при перемещении
мыши. Значение по умолчанию: 1.0.zoomSpeed — скорость масштабирования сцены при
прокрутке колесика мыши. Значение по умолчанию: 1.2.panSpeed — скорость панорамирования камеры. Значение по
умолчанию: 0.3.noRotate, noZoom, noPan —
булевы флаги, отключающие вращение, масштабирование или панорамирование
соответственно.staticMoving — если true, камера движется без инерции;
если false, применяется эффект плавного замедления при отпускании
мыши.dynamicDampingFactor — коэффициент замедления при
динамическом движении. Рекомендуемые значения от 0.1 до 0.5.Пример настройки:
controls.rotateSpeed = 1.5;
controls.zoomSpeed = 2.0;
controls.panSpeed = 0.5;
controls.staticMoving = false;
controls.dynamicDampingFactor = 0.2;
TrackballControls предоставляет методы для обновления и управления камерой:
upd ate() — ключевой метод, который необходимо вызывать
в цикле анимации для применения всех изменений.reset() — возвращает камеру и контроллер в исходное
состояние.handleResize() — обновляет внутренние параметры при
изменении размеров окна.addEventListener('change', callback) — позволяет
отслеживать изменения позиции камеры, полезно для перерисовки сцены
только при движении камеры.Пример использования в анимации:
function animate() {
requestAnimationFrame(animate);
controls.update();
renderer.render(scene, camera);
}
animate();
TrackballControls реализует три основные функции:
Вращение — при зажатой левой кнопке мыши камера
вращается вокруг целевой точки сцены. Вращение интуитивно зависит от
движения мыши, а направление и скорость настраиваются через
rotateSpeed и dynamicDampingFactor.
Масштабирование — колесо мыши изменяет
расстояние камеры до целевой точки. Можно также использовать среднюю
кнопку мыши для масштабирования. Настройки через
zoomSpeed.
Панорамирование — с помощью правой кнопки мыши
или комбинации клавиш (например, Ctrl + левая кнопка) камера смещается
параллельно плоскости экрана. Скорость панорамирования регулируется
через panSpeed.
Эти функции можно комбинировать, создавая плавные, естественные движения камеры с эффектом инерции.
TrackballControls использует свойство target для
определения точки, вокруг которой вращается камера. По умолчанию это
центр сцены (0,0,0).
controls.target.se t(1, 1, 0);
После изменения target рекомендуется вызвать
controls.update(), чтобы корректно пересчитать матрицу
камеры. Это позволяет фокусироваться на конкретных объектах сцены или
перемещать центр вращения в динамических приложениях.
TrackballControls полностью поддерживает сенсорные устройства. Основные жесты:
Это делает библиотеку удобной для мобильных приложений и интерактивных визуализаций.
TrackballControls хорошо сочетается с другими инструментами Three.js:
Пример интеграции с GUI:
const gui = new dat.GUI();
gui.add(controls, 'rotateSpeed', 0, 5);
gui.add(controls, 'zoomSpeed', 0, 5);
gui.add(controls, 'panSpeed', 0, 2);
Это обеспечивает полный контроль над поведением камеры без изменения кода рендеринга.
dynamicDampingFactor аккуратно.TrackballControls остаётся мощным инструментом для создания интерактивных 3D-приложений, где требуется гибкое и естественное управление камерой с эффектом шарового вращения, плавной инерцией и поддержкой сенсорных устройств. Его свойства, методы и возможности интеграции позволяют реализовать широкий спектр пользовательских интерфейсов и визуализаций в Three.js.