如何限制OrbitControl?

时间:2013-04-05 06:08:55

标签: three.js controls

有没有办法限制OrbitControls.js?想象一下,我在地面上创造了一些东西,我不想让相机低于地面,知道我的意思吗?!放大和缩小也是一样的。有没有办法设置一些变量来限制,因为我不希望相机关闭或太远?

3 个答案:

答案 0 :(得分:54)

OrbitControls source

放大/缩小

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

停止轮换的地方:

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

不要让它低于地面

controls.maxPolarAngle = Math.PI/2; 

答案 1 :(得分:1)

以防有人需要一个更稳健的地面高度和相机目标调整答案:

您可以找到相对于控制目标的角度和摄像机的地面位置(无论高度如何)并指定maxPolarAngle。调整你的向上轴,我的是Y.在控制改变事件:

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;

答案 2 :(得分:0)

如果要进一步控制轨道:

    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);
    });