【问题标题】:How to provide persistance in Arkit?如何在 Arkit 中提供持久性?
【发布时间】:2018-12-15 23:16:02
【问题描述】:

首先我想说的是,我真的是 IOS 开发和 AR 技术的初学者。我使用 Arkit 开发了有关 AR 的示例项目。我已经创建了虚拟 3D 对象并将对象放置在真实位置的某个位置。但是对象的生命周期只有一个会话。

我的意思是对象出现一个会话,当我在同一位置重新打开应用程序时,通常它的位置丢失了。我不保存对象的位置。如何在 Arkit 中提供持久性?我读过一些关于它的文章。

为了提供持久的 AR 体验,我应该遵循哪些步骤? 如何结合 AR 和定位服务? 有人知道吗?你能帮我解决一下吗?

如果问题重复,我真的很抱歉。

最好的问候。

【问题讨论】:

    标签: ios augmented-reality arkit


    【解决方案1】:

    iOS 12ARKit2 中恢复 AR 会话体验变得非常简单。 Apple 在 ARKit2 中提供了World Map Persistence,它可以让你保留几乎所有关于 AR 会话的内容。您可以保存 ARKit 世界地图并在以后恢复地图数据,即使应用程序终止,以便用户在以后重新打开应用程序时可以返回到之前的 AR 会话。

    Apple Documents 中所述,您可以:

    当您的应用处于非活动状态时保存世界地图,然后将其恢复为 下次您的应用在相同的物理环境中启动时。你可以 使用恢复的世界地图中的锚点来放置相同的虚拟 保存会话中相同位置的内容。

    ARWorldMap 符合 NSSecureCoding 协议,所以可以转换 使用二进制数据表示或从二进制数据表示的世界地图 NSKeyedArchiverNSKeyedUnarchiver 类。

    您将世界地图转换为数据并将其存储在文件中,然后您可以稍后在下次应用启动时加载此文件并将其转换回ARWorldMap,并将场景视图配置的初始世界地图设置为加载的世界地图:

     override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        // Retrieve the persisted world map, then simply set it in the configuration and run the session:
    
        let configuration = ARWorldTrackingConfiguration()
        configuration.initialWorldMap = worldMap
    
        sceneView.session.run(configuration)
    } 
    

    您可以关注this tutorial 以获得完整的工作示例。

    【讨论】:

    • 感谢您的友好回复。世界地图数据是否可能包含多个虚拟内容?我的意思是两个位置差不多的物体。
    • @OfficalMesut 世界地图包含您添加到场景中的所有对象,包括它们的位置。它们都将恢复到最初添加时的状态。
    • 再次感谢您。我会试试看。也许这是个奇怪的问题。我试着了解它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2013-07-17
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 2020-03-12
    相关资源
    最近更新 更多