有没有一种方法可以限制 OrbitControls.js
?比如,假设我正在创建一个空中场景,我不希望相机移动到地面以下,明白我的意思吗?同样的情况也适用于缩放。是否有一种设置变量来限制相机距离的方法,因为我不想让相机过近或过远?
放大 / 缩小
this.minDistance = 0;
this.maxDistance = Infinity;
旋转停止位置:
this.minPolarAngle = 0; // radians
this.maxPolarAngle = Math.PI; // radians
不要让它掉到地下去
controls.maxPolarAngle = Math.PI/2;
如果有人需要更全面的答案,包括地面高度和相机目标调整:
您需要找到相机相对于控制目标和地面位置的角度(无论高度如何),并分配最大极角。根据您的上轴进行调整,我的是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;
controls.target.y = Math.max(controls.target.y, 0);
来限制在地面以下的平移。 - Miro 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);
});
this.minZoom = 0
和this.maxZoom = Infinity
。 - Evertvdw