You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Three.js OrbitControls问题:设置相机高度后旋转中心偏移

解决OrbitControls围绕指定点旋转的问题

问题核心:OrbitControls的旋转中心由target属性控制,默认值为(0,0,0)。你之前仅通过camera.lookAt()设置相机朝向,但修改相机位置后,Controls的target并未自动同步到你期望的点,导致旋转中心偏离。

解决方案

直接手动设置OrbitControls.target为固定坐标,确保无论相机位置如何变化,旋转中心始终锁定在指定点。

修改后的代码

const init = () => {
    scene = new THREE.Scene();
    scene.background = new THREE.Color("whiteSmoke");

    renderer = new THREE.WebGLRenderer({ antialias: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.setPixelRatio(window.devicePixelRatio);
    renderer.shadowMap.enabled = true;

    camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 0.1, 100);
    // 先设置相机位置
    camera.position.y = 2;
    camera.position.z = 0.01;
    // 定义要围绕旋转的中心点
    const rotateCenter = new THREE.Vector3(0, player.height, 0);
    // 让相机朝向旋转中心
    camera.lookAt(rotateCenter);

    controls = new OrbitControls(camera, renderer.domElement);
    controls.enableDamping = true;
    controls.enableZoom = false;
    controls.rotateSpeed = -0.30;
    controls.enablePan = false;
    // 手动绑定Controls的旋转中心
    controls.target.copy(rotateCenter);
    // 更新Controls确保设置生效
    controls.update();

    scene.add(camera);

    // 坐标轴辅助
    const axesHelper = new AxesHelper(20);
    scene.add(axesHelper);

    loadModels(scene)

    animate();
};

const animate = () => {
    requestAnimationFrame(animate);
    // 启用阻尼时必须在每一帧调用update
    controls.update();
    renderer.render(scene, camera);
};

const onWindowResize = () => {
    controls.handleResize();
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(window.innerWidth, window.innerHeight);
}
init();

关键修改说明

  • 调整相机位置与朝向的设置顺序,避免坐标同步异常
  • 将controls.target与camera.lookAt的目标点保持一致,锁定旋转中心
  • 启用阻尼后,必须在animate循环中调用controls.update(),保证Controls状态正常更新

内容的提问来源于stack exchange,提问作者t20e

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:35:24