与多个用户/设备一起使用Apple的新ARKit的最佳方法是什么?
似乎每个设备都可以分别了解自己的场景。到目前为止,我最好的猜测是使用原始特征点位置,并尝试在设备之间进行匹配,以将不同的视图点粘合在一起,因为ARKit没有提供任何绝对参考引用。
===编辑1,我尝试过的事情===
1)特征点
我一直在玩耍并暴露了原始特征点,现在我确信在它们的当前状态下它们是死胡同:
因此,总的来说,我认为尝试以某种有意义的方式使用它们,而不能够在一台设备(更不用说多个设备)内进行任何类型的良好点匹配是不合理的。另一种方法是实现我自己的特征点检测和匹配,但是与其取代ARKit,还不如取代ARKit。
2)QR码
正如@Rickster所建议的那样,我还尝试了识别一个易于识别的对象(如QR码),并从该固定点获取了相对参照更改(请参阅[此问题,这有点困难,这暗示我使用一些openCV来估计相机姿态。但更重要的是非常有限
现在,在WWDC 2018上发布ARKit 2.0之后,可以为2至6个用户制作游戏。
为此,您需要使用ARWorldMap类。通过保存world maps并使用它们来开始新的会话,您的iOS应用程序现在可以添加新的增强现实功能:多用户和持久的AR体验。
ARWorldMap
world maps
AR多用户体验 。现在,您可以通过将存档的ARWorldMap对象发送到附近的iPhone或iPad来创建参考的共享框架。使用多个设备同时跟踪同一设备时world map,您可以建立一种体验,使所有用户(最多6个)可以共享并看到相同的虚拟3D内容(USDZ在Xcode 10和iOS 12中使用全新的Pixar的3D文件格式)。
world map
USDZ
session.getCurrentWorldMap { worldMap, error in guard let worldMap = worldMap else { showAlert(error) return } } let configuration = ARWorldTrackingConfiguration() configuration.initialWorldMap = worldMap session.run(configuration)
AR持久经验 。如果保存world map,然后iOS应用程序变为非活动状态,则可以在下一次启动应用程序时并在相同的物理环境中轻松还原它。您可以使用ARAnchors从恢复world map到从以前保存的会话相同的位置相同的虚拟3D内容(以USDZ或DAE格式)的地方。
ARAnchors