经纬志
首页 / Cesium / 使用示例

相机跟随运动目标

一台无人机沿椭圆航线盘旋并上下浮动,相机挂在它身后 620 米、上方 380 米的位置, 可以随时切换回自由视角,也能调整时间倍速。

CesiumJS 1.121 · 更新 2026-10-27
源码与运行效果
运行效果

轨迹从哪来

SampledPositionProperty 存的是「时间 → 三维坐标」的采样表, 两帧之间的位置由插值算法补。示例给了 30 个采样点,间隔 5 秒, 插值方式设为二次 Hermite,轨迹圆滑且能穿过所有采样点。

采样点密度决定了轨迹精度。直升机急转弯这类机动如果采样稀疏, 插值会把转弯抹平;把间隔压到 1 秒以内可以缓解,代价是数据量上升。

跟随靠 viewFrom

viewer.trackedEntity = entity 让相机每一帧都对准实体的位置。 机位由实体的 viewFrom 决定,它是一组局部偏移: x 朝东、y 朝北、z 朝上。示例的 (0, -620, 380) 表示 在目标正北方向 620 米、上方 380 米,也就是从后方斜上方观察。

把 trackedEntity 设为 undefined 就退出跟随, 相机会停在当前位置,之后的操作完全交给用户。

可调参数

位置改什么效果
viewFrom(0, -1200, 600)机位退得更远、抬得更高
STEPS = 30改成 12轨迹由圆滑变多边形
0.045 与 0.032改成 0.12 与 0.08盘旋半径变大
倍速按钮1× / 4× / 12×只改 clock.multiplier
alignedAxis删掉这一行图标不再转向运动方向

跟随状态下拖不动地球。相机被实体位置锁死,鼠标拖动只会改变观察角度, 一松手又回到 viewFrom 的机位。需要用户自由浏览时,先点「自由视角」。 如果业务上要求「跟随时也能微调」,应该用 camera.lookAt 自己维护机位,而不是 trackedEntity。

与 CZML 方案的区别

CZML 适合数据由后端下发、时间轴可变的场景;这里的写法适合轨迹在页面内计算、 或者从接口拿到坐标数组后自己转成采样属性。两者最后都落到 SampledPositionProperty 上,渲染性能没有区别。