2
是否有任何方法來限制場景中攝像機的平移運動?OrbitControl - 限制平移運動
試圖改變在orbitControls的pan
方法,但我不是很滿意的結果,我希望有這樣做更方便/有道是..
if (scope.object instanceof THREE.PerspectiveCamera) {
// perspective
var position = scope.object.position;
var offset = position.clone().sub(scope.target);
var targetDistance = offset.length();
// half of the fov is center to top of screen
targetDistance *= Math.tan((scope.object.fov/2) * Math.PI/180.0);
// we actually don't use screenWidth, since perspective camera is fixed to screen height
var dist_l = (2 * deltaX * targetDistance/screenHeight);
var dist_u = (2 * deltaY * targetDistance/screenHeight);
/////// X,Y limit calculation //////
var limit = 100;
if((position.x - dist_l) <= -limit){
dist_l = -0.1;
}else if((position.x - dist_l) >= limit){
dist_l = 0.1;
}
if((position.z - dist_u) <= -limit){
dist_u = -0.1;
}else if((position.z - dist_u) >= (limit*2.5)){
dist_u = 0.1;
}
/////// X,Y limit calculation //////
scope.panLeft(dist_l);
scope.panUp(dist_u);
} else if (scope.object instanceof THREE.OrthographicCamera) {
// orthographic
scope.panLeft(deltaX * (scope.object.right - scope.object.left)/screenWidth);
scope.panUp(deltaY * (scope.object.top - scope.object.bottom)/screenHeight);
}
這正是我想要的,謝謝! :) – Alexus
而不是手動檢查和設置'scope.target'的每個屬性,你可以像這樣['clamp()'](http://threejs.org/docs/#Reference/Math/Vector3.clamp) :'scope.target.clamp(new THREE.Vector3(minX,minY,minZ),new THREE.Vector3(maxX,maxY,maxZ))''。 –