相机跟随运动目标
一台无人机沿椭圆航线盘旋并上下浮动,相机挂在它身后 620 米、上方 380 米的位置, 可以随时切换回自由视角,也能调整时间倍速。
轨迹从哪来
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 上,渲染性能没有区别。