Как установить ограничения на OrbitControl - Three.js
Есть ли способ установить ограничения на OrbitControls.js? Представьте, что я создаю что-то над землей, мне не хотелось бы, чтобы камера опустилась ниже земли, знаете, что я имею в виду?! То же самое касается масштабирования и уменьшения масштаба. Есть ли способ установить некоторые переменные, чтобы ограничить это? Потому что я не хочу, чтобы камера приближалась или слишком далеко.
Большое спасибо. =)
Ответы
Ответ 1
Источник OrbitControls
Увеличение/уменьшение
this.minDistance = 0;
this.maxDistance = Infinity;
Где остановить вращение:
this.minPolarAngle = 0; // radians
this.maxPolarAngle = Math.PI; // radians
Не позволяйте идти ниже земли
controls.maxPolarAngle = Math.PI/2;
Ответ 2
На всякий случай кто-то нуждается в более надежном ответе с наземной высотой и настройкой цели камеры:
Вы найдете угол относительно цели управления и положение земли камеры (независимо от высоты) и назначьте maxPolarAngle. Отрегулируйте для своей оси, моя была Y. Внутри события изменения управления:
var centerPosition = controls.target.clone();
centerPosition.y = 0;
var groundPosition = camera.position.clone();
groundPosition.y = 0;
var d = (centerPosition.distanceTo(groundPosition));
var origin = new THREE.Vector2(controls.target.y,0);
var remote = new THREE.Vector2(0,d); // replace 0 with raycasted ground altitude
var angleRadians = Math.atan2(remote.y - origin.y, remote.x - origin.x);
controls.maxPolarAngle = angleRadians;