我找不到任何关于苹果ARKit是否支持类似Vuforia的3D物体跟踪(甚至图像跟踪)的信息。 我不希望将3D模型放在世界上的任何地方,而是想要检测特定的3D对象并在该对象前面和顶部放置AR对象。
简单例子:我想在现实世界中跟踪一个特定的玩具车,并在AR场景中在其顶部添加一个尾翼。
有人能否提供我是否可能的信息?
我找不到任何关于苹果ARKit是否支持类似Vuforia的3D物体跟踪(甚至图像跟踪)的信息。 我不希望将3D模型放在世界上的任何地方,而是想要检测特定的3D对象并在该对象前面和顶部放置AR对象。
简单例子:我想在现实世界中跟踪一个特定的玩具车,并在AR场景中在其顶部添加一个尾翼。
有人能否提供我是否可能的信息?
iOS 12 更新:在“ARKit 2”(又称 iOS 12 或更高版本上的 ARKit)中...
图像检测扩展到了图像跟踪,因此最多四个图像不仅会被检测一次,它们会每帧更新“实时”即使它们相对于世界空间移动。因此,您可以将可识别的 2D 图像附加到玩具上,并在屏幕上跟随玩具的虚拟 AR 内容。
还有物体检测 - 在开发过程中,您可以使用一个 ARKit 应用程序扫描现实世界的 3D 物体并生成“参考对象”文件。然后,您可以在应用程序中发送该文件,并将其用于识别用户环境中的该对象。这可能适用于您的“玩具车”案例...但请注意,3D 物体识别功能是检测而不是跟踪:ARKit 不会随着玩具车的移动而跟随它。
详细信息请参见WWDC18 关于 ARKit 2 的讲座。
iOS 11.3更新:在“ARKit 1.5”(又称iOS 11.3或更高版本的ARKit)中,有一个名为“图像检测”的新功能。如果你有一个已知的图片(如海报、纸牌等),可以将它包含在你的Xcode项目中和/或从其他地方加载它作为ARReferenceImage
并将其放置在你的会话配置的detectionImages
数组中。然后,当ARKit在用户环境中发现这些图片时,它会提供ARImageAnchor
对象告诉你它们的位置。
iOS 12
的ARKit 2.0
不仅支持相机跟踪
功能,还包括:
iOS 13
的ARKit 3.0
支持更加高级的功能:
extern "C" void SessionRemoveAllAnchors(void* nativeSession) {
UnityARSession* session = (__bridge UnityARSession*)nativeSession;
for (ARAnchor* a in session->_session.currentFrame.anchors)
{
[session->_session removeAnchor:a];
return;
}
}
private static extern void SessionRemoveAllAnchors (IntPtr nativeSession);
并且在RemoveUserAnchor下面:
public void RemoveAllAnchors() {
#if !UNITY_EDITOR
SessionRemoveAllAnchors(m_NativeARSession);
#endif
}
然后从Update或Coroutine中调用此函数:
UnityARSessionNativeInterface.GetARSessionNativeInterface().RemoveAllAnchors ();
当锚点被移除后,图像可以再次被识别。虽然不是非常流畅,但它确实起作用。
希望这对你有所帮助!如果您需要进一步的帮助,请告诉我。