2013-04-05 23 views
21

için sınırları nasıl ekleyebilirim? OrbitControls.js'nin sınırlarını koymanın bir yolu var mı? Yerde bir şey yarattığımı hayal et, kameranın zeminden aşağı inmesini istemem, ne demek istediğimi bilmiyorum ?! Aynı şeyler yakınlaştırmak ve uzaklaştırmak için de geçerli. Bunu sınırlamak için bazı değişkenler belirlemenin bir yolu var mı? Çünkü kameranın kapanmasını veya çok uzaklaşmasını istemiyorum.OrbitControl - Three.js

Çok teşekkürler. rotasyonunu durdurmak için nerede =)

cevap

44

OrbitControls source

Yakınlaştırma/içinde

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

uzaklaştırmak:

this.minPolarAngle = 0; // radians 
this.maxPolarAngle = Math.PI; // radians 
yer altında gitmek izin vermeyin

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

Ayrıca yatay rotasyon sınırlamak için bir yol var mı? – BuildingJarl

+3

Yeh, bkz. [Bu yanıt] (http://stackoverflow.com/questions/25308943/limit-orbitcontrols-horizontal-rotation/25311658#25311658) – igneosaur

1

Sadece durumda omeone, zemin irtifası ve kamera hedef ayarlaması ile daha sağlam bir cevaba ihtiyaç duyar:

Kameranın kontrol hedefine ve kameraya ait yere göre açıyı (yükseklikten bağımsız olarak) bulun ve maxPolarAngle'ı atayın. Senin yukarı ekseni için ayarlama, benim Y oldu. Kontrolleri değiştirmek olay:

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

Çalışıyor, ancak kontrol yörüngesini (yukarı ve aşağı) kilitler. Yörüngeyi hedefin altındaki rakıma kaydırın. Ve yörünge hedefini tekrar hareket ettirmenin bir yolu yok. – zwcloud

+0

Bir kod veya jsfiddle oluşturabilir misiniz? Çözüme yardımcı olmaktan mutluluk duyarım. @zwcloud – Radio