2013-04-05 52 views
21

Có cách nào để đặt giới hạn trên OrbitControls.js không? Hãy tưởng tượng tôi đang tạo ra thứ gì đó trên mặt đất, tôi sẽ không thích chiếc máy ảnh hạ xuống dưới mặt đất, biết ý tôi là gì ?! Những thứ tương tự cũng được dùng để phóng to và thu nhỏ. Có cách nào để thiết lập một số biến để hạn chế? Vì tôi không muốn máy ảnh bị đóng hoặc quá xa.Làm cách nào để đặt giới hạn trên OrbitControl - Three.js

Cảm ơn rất nhiều. =)

Trả lời

44

OrbitControls source

Phóng to/thu nhỏ

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

Nơi dừng luân chuyển:

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

Đừng để đi dưới mặt đất

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

cũng có cách nào để hạn chế xoay ngang không? – BuildingJarl

+3

Yeh, xem [câu trả lời này] (http://stackoverflow.com/questions/25308943/limit-orbitcontrols-horizontal-rotation/25311658#25311658) – igneosaur

1

Chỉ trong trường hợp s omeone cần một câu trả lời mạnh mẽ hơn với độ cao mặt đất và điều chỉnh mục tiêu của máy ảnh:

Bạn tìm góc tương ứng với mục tiêu điều khiển và vị trí mặt đất của máy ảnh (bất kể độ cao) và gán maxPolarAngle. Điều chỉnh cho trục lên của bạn, tôi là Y. Bên trong sự kiện thay đổi điều khiển:

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

Nó hoạt động nhưng nó sẽ khóa quỹ đạo điều khiển (lên và xuống) nếu bạn xoay mục tiêu quỹ đạo bên dưới độ cao mặt đất. Và không có cách nào để di chuyển lên mục tiêu quỹ đạo một lần nữa. – zwcloud

+0

Bạn có thể tạo một codepen hoặc jsfiddle không? Tôi rất sẵn lòng giúp giải quyết. @zwcloud – Radio

Các vấn đề liên quan