Appearance
相机与导航
viewer.camera 管相机位姿与导航:取景适配(fitView)、标准视图切换(setStandardView)、位姿读写(getState / setState)与交互开关。鼠标 / 触控交互由引擎内置,集成方无需自己接管事件。
在下面的 demo 中直接体验内置交互:左键拖拽旋转、滚轮缩放、右键拖拽平移,按空格键取景适配:
核心 API
ts
// 取景适配:整模型 / 指定节点 / 显式包围盒,默认 400ms 平滑动画
viewer.camera.fitView(); // 整模型(无选中时)
viewer.camera.fitView({ nodeIds: [someNodeId] }, { animate: false }); // 指定节点,跳过动画
// 标准视图(Z-up / CATIA 约定)
viewer.camera.setStandardView("iso");
// 订阅相机变化(交互期间约 30Hz 节流)
viewer.on("camera-changed", (e) => console.log(e.position, e.target));
// 视角存取:getState 取快照,setState 恢复
const saved = viewer.camera.getState(); // { position, target, up, fov }
viewer.camera.setState(saved);行为要点
fitView的取景目标按优先级回落:显式target.box→target.nodeIds指定的节点 → 当前选中集(支持面 / 边子实体粒度)→ 整个模型。无模型或解析不出范围时静默返回。取景保持当前视线方向,只调整距离与注视点。- 动画默认开:
FitViewOptions的animate默认true、durationMs默认 400;交互期间用户按下指针会立即取消进行中的相机动画。 setStandardView接受 7 个视图名:"front"/"back"/"right"/"left"/"top"/"bottom"/"iso",语义按 Z-up / CATIA 约定(Front=+X, Right=+Y, Top=+Z),各视图的方位与屏幕 up 向量见坐标系与单位。以最近一次取景范围为中心定距取景,模型尚未取过景时为 no-op。camera-changed约 30Hz 节流:交互期间相机位姿变化以约 30Hz 上限对外广播(payload 含position/target/up),适合驱动小地图、视角同步等 UI;程序化setState也会触发。- 内置交互键位:左键拖拽旋转(orbit)、滚轮缩放、右键拖拽平移。
setNavMode("pan")可把左键改为平移;setInteractionEnabled(false)关闭全部指针交互(API 控制不受影响)。 getState/setState做视角存取:getState()返回{ position, target, up, fov }快照,可序列化保存;setState()部分更新(只写传入字段),立即生效并触发camera-changed,同时取消进行中的相机动画(如fitView取景过渡)。
相关 API
- 概览:viewer.camera — 相机域的设计意图与典型用法。
- 坐标系与单位 — Z-up 约定与 7 个标准视图的精确语义。
CameraManager— 本页全部方法的完整签名。FitViewOptions— 取景动画选项。