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

Three.js如何让旋转轴始终保持在世界/物体中心?

固定Three.js相机旋转中心的解决方案

一、锁定到世界中心

如果使用的是OrbitControls(这类3D查看器教程的常用控制器),默认右键平移会改变旋转中心——因为平移操作会自动调整控制器的target属性。要固定到世界中心,只需直接指定target为世界原点,并修改平移模式避免其被改动:

// 初始化控制器后配置
const controls = new THREE.OrbitControls(camera, renderer.domElement);

// 固定旋转中心到世界原点
controls.target.set(0, 0, 0);
// 启用屏幕空间平移,防止平移时修改target
controls.screenSpacePanning = true;
// 按需调整平移速度
controls.panSpeed = 0.5;

// 必须调用update让设置生效
controls.update();

二、锁定到物体中心

如果要以加载的3D模型为旋转中心,先计算模型的包围盒中心,再将控制器的target指向该点:

单个模型对象

const model = yourLoadedModel; // 替换为你的模型实例
// 计算模型包围盒
model.geometry.computeBoundingBox();
const modelCenter = model.geometry.boundingBox.getCenter(new THREE.Vector3());

// 设置旋转中心为模型中心
controls.target.copy(modelCenter);
controls.update();

模型组(多个物体组成的Group)

如果模型是多个物体的组合,需要计算整个组的包围盒:

const modelGroup = yourModelGroup; // 替换为你的模型组实例
const groupBox = new THREE.Box3().setFromObject(modelGroup);
const groupCenter = groupBox.getCenter(new THREE.Vector3());

controls.target.copy(groupCenter);
controls.update();

同样要开启screenSpacePanning = true,确保平移操作不会修改旋转中心。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:15:36