OStack程序员社区-中国程序员成长平台

标题: swift - 具有多个用户的ARKit [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:00
标题: swift - 具有多个用户的ARKit

与多个用户/设备一起使用Apple的新ARKit的最佳方法是什么?

似乎每个设备都可以分别了解自己的场景。到目前为止,我最好的猜测是使用原始特征点位置,并尝试在设备之间进行匹配以将不同的视图点粘合在一起,因为ARKit没有提供任何绝对参考引用。

===编辑1,我尝试过的事情===

1)特征点

我一直在玩耍,并且暴露了原始特征点,现在我确信在它们的当前状态下它们是死胡同:

  • 它们不是原始特征点,它们仅公开位置,但通常不会在跟踪的特征点中找到任何属性
  • 它们的实例化不会在帧之间继续,位置也不完全相同
  • 通常会发生这样的情况,即当摄像机输入几乎没有变化时,报告的特征点变化很大,要么出现很多,要么消失很多。

  • 因此,总的来说,我认为尝试以某种有意义的方式使用它们,而不能够在一台设备(更不用说多个设备)内进行任何类型的良好点匹配是不合理的。
    另一种方法是实现我自己的特征点检测和匹配,但是与其取代ARKit,还不如取代ARKit。

    2)二维码

    正如@Rickster所建议的那样,我还尝试了识别易于识别的对象(如QR码)并从该固定点获取相对参照更改(请参阅this question)。这有点困难,这暗示我使用一些openCV来估计相机姿态。但更重要的是非常有限



    Best Answer-推荐答案


    现在,在WWDC 2018上发布ARKit 2.0之后,可以为2至6个用户制作游戏。

    为此,您需要使用ARWorldMap类。通过保存world maps并使用它们开始新的 session ,您的iOS应用程序现在可以添加新的增强现实功能:多用户和持久的AR体验。

    AR多用户体验。现在,您可以通过将存档的ARWorldMap对象发送到附近的iPhone或iPad来创建参考的共享框架。使用多个设备同时跟踪相同的world map时,您可以建立一种体验,使所有用户(最多6个)可以共享并看到相同的虚拟3D内容(在Xcode 10和iOS 12中使用全新的Pixar的3D格式的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应用程序变为非 Activity 状态,则可以在下次启动应用程序时和在同一物理环境中轻松还原它。您可以使用恢复的ARAnchors中的world map将相同的虚拟3D内容(以USDZ或DAE格式)放置在上一个保存的 session 中的相同位置。

    关于swift - 具有多个用户的ARKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753535/






    欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4