跳到主要内容

图像追踪

图像追踪根据样本和估计尺寸识别现实图像,底层视觉系统提供位置、方向和追踪状态。

支持​

检查是否支持:

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
});