图像追踪
图像追踪根据样本和估计尺寸识别现实图像,底层视觉系统提供位置、方向和追踪状态。
支持
检查是否支持:
if (app.xr.imageTracking.supported) {
// image tracking is supported
}
app.xr.on('start', () => {
if (app.xr.imageTracking.available) {
// image tracking is supported and available
// it can still be false if images were not provided
}
});
图像
必须在会话开始前提供图片及真实宽度,单位为米。可使用常见 Web 图像格式,应尽量接近实物。
分辨率至少 300×300,更高分辨率不会改善性能或可靠性。
颜色不重要,为减小下载可使用灰度。
重复图案或过多几何特征会降低可靠性。
添加与移除图像
仅在会话未运行时可修改列表。
添加:
// image that is 20cm wide (0.2m)
const trackedImage = app.xr.imageTracking.add(image, 0.2);
移除:
app.xr.imageTracking.remove(trackedImage);
获取当前列表:
const trackedImages = app.xr.imageTracking.images;
for (let i = 0; i < trackedImages.length; i++) {
const trackedImage = trackedImages[i];
}
位置与旋转
世界空间姿态自动更新,可读取最新数据:
const position = trackedImage.getPosition();
const rotation = trackedImage.getRotation();
可靠性
视觉追踪受噪声、照明不稳、观察角度、遮挡和运动模糊等影响,底层会提供状态信息。
先检查图像是否可追踪:
if (!trackedImage.trackable) {
// it could be too small, or the underlying system is unable to parse the image
}
会话启动后,无法使用的图像会报告相关错误:
app.xr.imageTracking.on('error', (err) => {
console.warn(err.message);
});
追踪状态
检查当前是否主动追踪:
if (trackedImage.tracking) {
// actively tracked
}
暂时失去追踪时,会假设现实图片未移动,模拟位置和旋转:
if (trackedImage.emulated) {
// position and rotation is emulated
// based on previously known tracking information
}
可订阅开始或丢失主动追踪的事件:
trackedImage.on('tracked', () => {
// image is now actively tracked
});
trackedImage.on('untracked', () => {
// image is no longer actively tracked
});