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

Babylon.js修改相机旋转目标且不自动将目标居中到屏幕的实现方法

实现方案

你要的效果可以通过**坐标投影计算targetScreenOffset**实现,全程不会改动当前视图:

  1. 首先明确targetScreenOffset的单位规则:x、y取值范围均为[-1,1],分别对应屏幕从左到右、从下到上的全宽高,值为(0,0)时相机目标点对齐屏幕中心。
  2. 双击网格时执行以下逻辑:
// 1. 获取选中网格的世界中心坐标
const meshCenter = mesh.getBoundingInfo().boundingSphere.centerWorld;

// 2. 将3D世界坐标投影为屏幕归一化坐标(取值范围0~1)
const screenPos = BABYLON.Vector3.Project(
  meshCenter,
  BABYLON.Matrix.Identity(),
  scene.getTransformMatrix(),
  camera.viewport.toGlobal(engine.getRenderWidth(), engine.getRenderHeight())
);

// 3. 计算需要的targetScreenOffset值,抵消目标点切换带来的视图偏移
const offsetX = (0.5 - screenPos.x) * 2;
const offsetY = (screenPos.y - 0.5) * 2;

// 4. 赋值即可,无视图跳变
camera.target = meshCenter.clone();
camera.targetScreenOffset.set(offsetX, offsetY);

该方案完全兼容你已经实现的右键平移、左键旋转逻辑,不需要重构现有相机行为代码。
其他可选实现路径是通过修正ArcRotateCamera的alpha、beta、radius参数抵消目标点切换的偏移,但计算复杂度更高,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:18:04