PathTracker与ObjectTracker全面使用教程
在3D地图可视化开发中,相机控制和动态对象追踪是实现沉浸式体验的关键功能。mapv-three 提供了两个核心工具组件:
PathTracker
(路径追踪器)和
ObjectTracker
(对象追踪器)。本文将系统性地介绍这两个组件的配置方式与实际应用场景,帮助开发者高效掌握其使用技巧。
一、PathTracker 路径追踪器详解
该组件用于实现沿指定轨迹的动画追踪,适用于相机移动或3D模型行进等场景。支持多种数据输入格式,并可灵活设置不同的视图模式以满足多样化需求。
PathTracker
1. 基础应用方式
控制相机沿路径移动
最典型的用法是驱动相机沿预设路线自动巡航:
// 初始化路径追踪实例
const tracker = engine.add(new mapv-three.PathTracker());
// 定义路径点(经纬高数组)
tracker.track = [
[112.368264, 23.176959, 38.553634],
[112.370264, 23.178959, 40.553634],
[112.372264, 23.180959, 42.553634]
];
// 启动动画追踪
tracker.start({
duration: 10000, // 动画总时长(毫秒)
pitch: 60, // 相机俯仰角度
range: 100 // 观察距离
});
驱动3D模型沿路径行进
除了控制相机,
PathTracker
同样可用于让三维对象沿着路径运动:
// 加载一个GLB格式的3D模型
const model = engine.add(new mapv-three.SimpleModel({
url: 'path/to/model.glb'
}));
// 创建并绑定路径追踪器
const tracker = engine.add(new mapv-three.PathTracker());
tracker.track = pathCoordinates;
tracker.object = model; // 指定被追踪的目标对象
// 开始播放动画
tracker.start({
duration: 8000,
range: 50
});
2. 支持的路径数据格式
为适应不同来源的数据结构,
PathTracker
提供了三种主流格式的支持,便于开发者根据实际情况选择。
坐标数组格式
最简洁的形式,直接传入包含经度、纬度和高度的坐标点序列:
tracker.track = [ [lng1, lat1, alt1], [lng2, lat2, alt2], [lng3, lat3, alt3] ];
GeoJSON 格式
兼容标准 GeoJSON 结构,适合从地理信息系统导入数据:
tracker.track = {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [
[lng1, lat1, alt1],
[lng2, lat2, alt2]
]
},
properties: {
frameInfo: [] // 可选:附加关键帧参数
}
};
帧信息数组格式
提供更精细的控制能力,允许为每个路径点设定方向、速度和时间戳:
tracker.track = [
{
x: lng1, y: lat1, z: alt1,
yaw: 1.57, // 偏航角(弧度)
pitch: 0.7, // 俯仰角
speed: 10, // 移动速度(米/秒)
time: 1000 // 到达该点的时间(毫秒)
},
// ... 其余路径点
];
3. 多种视图模式配置
通过切换视图模式,可以实现差异化的视觉效果,适配各类交互需求。
PathTracker
跟随模式(follow)
相机始终朝向移动方向,视角随路径曲率自动调整:
tracker.track = pathData;
tracker.viewMode = 'follow';
tracker.start({
duration: 7000,
heading: 10,
pitch: 70,
range: 10
});
锁定模式(lock)
保持固定观察角度,不随路径走向改变朝向:
tracker.track = pathData;
tracker.viewMode = 'lock';
tracker.start({
duration: 50000,
pitch: 70,
range: 100
});
解锁模式(unlock)
允许用户自由操作相机,仅位置跟随路径,旋转不受限制:
tracker.viewMode = 'unlock';
tracker.object = model;
tracker.start({
duration: 50000,
pitch: 70,
range: 100
});
关键帧模式(keyFrame)
利用预先定义的关键帧精确控制每一时刻的相机姿态:
// 在 GeoJSON 的属性中添加 frameInfo 数组
pathData.properties.frameInfo = [
{ pitch: 0.7, yaw: 1.57, time: 1000 },
1.4 高级配置选项
在使用追踪器时,可通过多种高级设置实现更精细的控制。以下为关键功能说明:
插值阈值调节
该参数用于控制路径插值过程中的平滑程度:
// 数值越大,路径拐角过渡越柔和,但可能偏离原始轨迹
tracker.interpolateDirectThreshold = 100;
interpolateDirectThreshold
曲线插值支持
启用曲线插值可使运动路径更加自然流畅:
tracker.pointHandle = 'curve';
暂停与恢复功能
系统支持动态暂停和继续追踪操作:
// 暂停当前追踪,并获取状态信息
const stateInfo = tracker.pause();
console.log(stateInfo);
// 恢复追踪
tracker.start();
// 重新开始播放
tracker.replay();
生命周期回调函数
提供多个阶段的回调接口,便于监控追踪流程:
tracker.onStart = () => {
console.log('追踪开始');
};
tracker.onUpdate = (state) => {
console.log('状态更新:', state);
};
tracker.onFinish = () => {
console.log('追踪完成');
};
二、ObjectTracker:对象追踪器详解
此模块用于锁定并跟随指定的3D对象或空间坐标点,确保相机始终对准目标。
ObjectTracker
2.1 基础使用方法
最常见的应用场景是追踪一个加载的3D模型:
// 添加3D模型到引擎
const model = engine.add(new mapv-three.SimpleModel({
url: 'path/to/model.glb'
}));
// 创建对象追踪实例
const tracker = engine.add(new mapv-three.ObjectTracker());
// 启动追踪,设定观察距离、角度等参数
tracker.track(model, {
range: 100, // 相机距离目标100米
pitch: 60, // 俯仰角60度
heading: 45 // 方位角45度
});
2.2 可配置参数说明
支持丰富的自定义选项以适应不同需求:
tracker.track(object, {
range: 100, // 观察距离(单位:米)
pitch: 60, // 俯仰角度(上下视角)
heading: 45, // 方位角度(左右旋转)
height: 50, // 垂直高度偏移
extraDir: 30, // 附加方向校正角度
duration: 0, // 追踪持续时间(0表示无限期)
easing: 'linear', // 动画缓动类型
lock: true // 是否固定视角
});
参数详细解释
- range/radius:相机与目标之间的距离,单位为米。
- pitch:决定相机上下倾斜的角度。
- heading:控制相机水平旋转的方向。
- height:在非地球坐标模式下调整相机垂直位置。
- extraDir:微调相机最终朝向的小幅角度补偿。
- duration:设定自动停止前的持续时间;设为0则持续追踪直至手动结束。
- easing:动画过渡效果函数,可选值包括 'linear'、'easeIn'、'easeOut'、'easeInOut'。
- lock:若为true,则视图角度将被锁定不变。
2.3 追踪帧更新回调
允许开发者在每一帧渲染时执行自定义逻辑:
tracker.onTrackFrame = (lastState, currentState) => {
console.log('追踪状态更新:', currentState);
// 此处可加入额外处理逻辑
// 如:根据目标位置刷新UI界面
// 或触发其他联动动画
};
ObjectTracker
2.4 结束追踪操作
调用 stop 方法可终止追踪并重置内部状态:
tracker.stop();
三、组合应用实践
在实际开发中,常需结合多种追踪方式来实现复杂视觉效果。
PathTracker
ObjectTracker
3.1 路径移动 + 对象跟随
实现模型沿预设路径行进的同时,相机实时追踪该模型:
// 创建3D模型
const model = engine.add(new mapv-three.SimpleModel({
url: 'path/to/model.glb'
}));
首先为模型设置沿路径移动的逻辑(如通过 PathTracker 控制其位置),然后利用 ObjectTracker 让相机持续对准该模型。这种组合可用于模拟车辆行驶、飞行器巡航等动态场景,提升沉浸感与视觉连贯性。
关键帧模式中的瞄准点功能
关键帧模式还支持定义特定的瞄准点,使相机在指定时刻对准某个地理坐标:
pathData.properties.frameInfo = [
{
aim: [lng, lat, alt], // 设置瞄准点的经度、纬度、高度
time: 1000
}
];
活动帧模式(activeFrame)
该模式与关键帧类似,但提供更灵活的插值计算能力:
tracker.track = pathData;
tracker.viewMode = 'activeFrame';
tracker.start({
range: 0
});
// 创建3D模型并添加到引擎
const model = engine.add(new mapv-three.SimpleModel({
url: 'path/to/model.glb'
}));
// 配置路径追踪器,实现模型沿预设路径移动
const pathTracker = engine.add(new mapv-three.PathTracker());
pathTracker.track = pathData; // 绑定路径数据
pathTracker.object = model; // 指定追踪对象为模型
pathTracker.viewMode = 'unlock'; // 启用自由视角模式
pathTracker.start({
duration: 50000,
pitch: 70,
range: 100
});
// 设置对象追踪器,用于控制相机跟随模型
const objectTracker = engine.add(new mapv-three.ObjectTracker());
objectTracker.track(model, {
pitch: 80,
radius: 100,
height: 100
});
PathTracker
ObjectTracker
六、总结
PathTracker 和 ObjectTracker 是 mapv-three 中实现动态追踪的核心组件。它们既可独立使用,也能协同工作,支持丰富的相机控制与对象动画效果。
适用于需要对象沿路径行进的场景,兼容多种路径格式,并提供灵活的视图模式选择。PathTracker
更适合对静态或动态目标进行持续追踪,配置简便且适应性强。ObjectTracker- 在联合使用时,务必注意初始化顺序:先启动
,再激活ObjectTracker
,以避免画面抖动。PathTracker - 合理调整参数设置并结合回调机制,有助于提升运行效率和交互体验。
四、最佳实践
4.1 性能优化
- 合理设置插值阈值:根据路径复杂程度调节
,防止因过度平滑造成性能开销。interpolateDirectThreshold - 选用恰当的视图模式:若无需实时调整视角,采用
模式可降低计算负担。lock - 及时终止追踪任务:当不再需要追踪功能时,应调用
方法释放资源。stop()
4.2 数据准备
- 路径数据预处理:对于点密集的路径,建议预先进行抽稀处理,减少冗余节点。
- 统一坐标格式:确保所有空间数据采用一致的坐标系和单位系统。
- 优化帧信息结构:在使用关键帧模式时,合理控制关键帧数量,避免过多导致渲染卡顿。
五、常见问题及解决方案
5.1 追踪过程中出现抖动
现象描述:同时使用
PathTracker 与 ObjectTracker 时发生视觉抖动。
解决方法:
- 确认初始化顺序:必须先初始化
,再初始化ObjectTracker
。PathTracker - 调整
的数值,优化插值精度。interpolateDirectThreshold - 检查模型位置更新频率是否过高或不一致。
5.2 路径数据格式不被识别
问题原因:提供的路径数据不符合解析要求。
应对措施:
- 验证数据是否属于以下三种支持格式之一。
- 确保坐标数组结构正确,如
所示。[[lng, lat, alt], ...] - 若使用 GeoJSON 格式,需包含有效的
字段。geometry.type === 'LineString'
5.3 相机视角偏离预期
问题表现:相机朝向或距离不符合设定效果。
排查方案:
- 核对
与pitch
参数配置是否准确。heading - 利用
来精确控制视图行为。viewMode - 在关键帧模式下,检查
数据的时间戳与姿态信息是否匹配。frameInfo


雷达卡


京公网安备 11010802022788号







