ios - ARKit 保存对象位置并在下一个 session 中查看它

标签 ios object save position arkit

我正在为一个使用 ARKit 的项目工作。我需要保存一个对象位置,并且我希望在我的下一个应用程序启动时看到它曾经所在的位置。例如,在我的办公室里,我在门上贴了一些文字,然后回到家,第二天我希望在 ARKit 中可以在那个地方看到该文字。

最佳答案

在 iOS 12 中:是的!

“ARKit 2”,又名 ARKit for iOS 12,添加了一组 Apple 称之为“世界地图持久化和共享”的功能。您可以获取 ARKit 对其本地环境的所有了解,包括您用于跟踪虚拟内容的真实世界位置的任何 ARAnchor,并将其保存在 ARWorldMap 中。目的。

然后您可以将该对象序列化为一个文件,稍后加载该文件以有效地恢复较早的 AR session (如果用户处于相同的本地环境中)。成功“重新定位”到世界地图后,您的 session 具有与保存前相同的 ARAnchor,因此您可以使用它来重新创建您的虚拟内容(例如使用 name 保存/恢复的 anchor 来决定显示哪个 3D 模型)。

有关详细信息,请参阅 the WWDC18 talk on ARKit 2Apple's ARKit docs and sample code .

否则,可能不会。

在 iOS 12 之前,ARKit 不提供一种方法来使其本地世界映射的任何结果持久化。您在 AR session 中所做的一切、定位的每个点都仅在该 session 的上下文中定义。如果您根据平面检测、 HitTest 和/或用户输入放置一些虚拟内容,则该位置的引用框架与您的设备在 session 开始时的位置相关。

由于没有可以跨 session 持续存在的引用框架,因此无法定位虚拟内容,使其在(完全)退出/重新启动应用程序后看起来保持在相同的真实世界位置/方向。

但也许……

iOS 11.3 中“ARKit 1.5”的新增功能之一是解决此问题的逃生阀:image detection .如果您的应用程序用例涉及已知/受控环境(例如,使用虚拟叠加层在艺术博物馆中引导游客),并且该环境中有一些易于识别的 2D 特征(如著名画作),ARKit 可以检测它们的位置。

一旦您检测到您知道是环境固定特征的图像 anchor ,您就可以告诉您的 AR Session 围绕该 anchor 重新定义其世界坐标系(参见 setWorldOrigin)。这样做之后,您实际上拥有一个跨多个 session 相同的坐标系(假设您检测到相同的图像并在每个 session 中设置世界原点)。

关于ios - ARKit 保存对象位置并在下一个 session 中查看它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49153564/

相关文章:

java - 如何调用类/静态方法

javascript - 访问 javascript/jquery 中存储在数组中的对象的属性

Javascript:如何通过方法调用定义对象的属性?

android - 点击后退按钮时将数据保存在编辑文本中

ios - 将 JSON 解析为 TableView 时出现 NSNull 长度错误

ios - 如何在 iOS 上调整 OpenGL ES 渲染缓冲区的大小?

iOS 8 : Sound setting doesn't work for UIUserNotificationType

iPhone 应用程序在某些设备(不是全部)上启动时崩溃

javascript - 使用不同的扩展名 javascript 保存文件

python - 嵌套列表并保存到文本文件中