Existe-t-il un moyen de limiter les OrbitControls.js
? Imaginez que je crée quelque chose au-dessus du sol, je ne voudrais pas que la caméra passe sous le sol, vous voyez ce que je veux dire?! Il en va de même pour les zooms avant et arrière. Existe-t-il un moyen de définir certaines variables pour limiter cela parce que je ne veux pas que la caméra se rapproche ou s'éloigne trop?
Zoom avant Zoom arrière
this.minDistance = 0;
this.maxDistance = Infinity;
Où arrêter la rotation:
this.minPolarAngle = 0; // radians
this.maxPolarAngle = Math.PI; // radians
Ne laissez pas aller sous terre
controls.maxPolarAngle = Math.PI/2;
Juste au cas où quelqu'un aurait besoin d'une réponse plus robuste avec l'altitude au sol et le réglage de la cible de la caméra:
Vous trouvez l'angle par rapport à la cible des commandes et la position au sol de la caméra (quelle que soit l'altitude) et attribuez le maxPolarAngle. Ajustez votre axe vers le haut, le mien était Y. À l'intérieur de l'événement de changement de commandes:
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;
Si vous voulez plus de contrôle sur Orbite:
const controls = new OrbitControls(camera, this.renderer.domElement);
controls.enableDamping = true; //damping
controls.dampingFactor = 0.25; //damping inertia
controls.enableZoom = true; //Zooming
controls.autoRotate = true; // enable rotation
controls.maxPolarAngle = Math.PI / 2; // Limit angle of visibility
controls.keys = {
LEFT: 37, //left arrow
UP: 38, // up arrow
RIGHT: 39, // right arrow
BOTTOM: 40 // down arrow
};
controls.addEventListener("change", () => {
if (this.renderer) this.renderer.render(this.scene, camera);
});