2013-04-05 11 views
21

Czy istnieje sposób na ograniczenie limitów na OrbitControls.js? Wyobraź sobie, że tworzę coś ponad ziemią, nie chciałbym, żeby kamera schodziła pod ziemię, wiesz co mam na myśli ?! To samo dotyczy powiększania i pomniejszania. Czy istnieje sposób na ustawienie niektórych zmiennych, aby to ograniczyć? Bo nie chcę, żeby kamera się zamykała lub była za daleko.Jak ustawić limity na OrbitControl - Three.js

Wielkie dzięki. =)

Odpowiedz

44

OrbitControls source

Powiększenie/pomniejszenie

this.minDistance = 0; 
this.maxDistance = Infinity; 

Gdzie zatrzymać rotację:

this.minPolarAngle = 0; // radians 
this.maxPolarAngle = Math.PI; // radians 

Nie pozwól, aby przejść pod ziemią

controls.maxPolarAngle = Math.PI/2; 
+7

Czy istnieje również sposób ograniczenia obrotu poziomego? – BuildingJarl

+3

Yeh, patrz [ta odpowiedź] (http://stackoverflow.com/questions/25308943/limit-orbitcontrols-horizontal-rotation/25311658#25311658) – igneosaur

1

Na wszelki wypadek s omeone potrzebuje bardziej niezawodnej odpowiedzi z wysokością gruntu i regulacją celu kamery:

Kąt jest określany względem celu sterowania i pozycji ziemi kamery (niezależnie od wysokości) i przypisać maxPolarAngle. Dopasuj do swojej osi w górę, moja była Y. Wewnątrz zdarzenia zmiany sterowania:

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; 
+0

Działa, ale zablokuje orbitę kontrolną (w górę iw dół), jeśli przesunąć cel orbity poniżej wysokości gruntu. I nie ma sposobu, aby ponownie podnieść cel orbity. – zwcloud

+0

Czy można utworzyć codepen lub jsfiddle? Z chęcią pomogę rozwiązać. @zwcloud – Radio