首页 文章

存储 ARKit 点云数据并检索显示

提问于
浏览
8

我希望存储使用 ARKit 和 Unity 记录的点云数据,以便可以像原始记录一样检索和显示它。假设我只是简单地显示点云数据 UnityPointCloudExample.cs 脚本的功能,它包含在 Unity 插件中。但是,当检测到并显示某个点时,我还会存储有关该点的一些相关信息。然后我完全关闭了应用程序。当我再次打开应用程序时,我希望能够在相对于相机的相同位置重新加载数据,就像最初检测到的那样,这是否可以使用 ARKit 和 Unity 插件 as-is?

我知道这需要存储有关相机位置相对于点位置的一些信息,然后在重新启动应用程序时,需要在相机重新启动时的新位置和上一个会话中的位置之间进行某种转换。记录点,然后使用此信息将点放在正确的位置。通过 ARKit 文档,我不确定如何使用本机界面实现这一点,而且我更不确定如何使用 Unity 插件实现它。如果有人能够至少指导我使用 Unity 插件或本机 ARKit 接口的元素,这些元素最容易促进上述功能的实现,我将非常感激。

或者,如果这在当前状态下超出了 ARKit/Unity 插件的范围,解释如何以及为什么会出现这种情况也同样有用。谢谢!

1 回答

  • 0

    当 AR 跟踪首次开始时,ARKit 将原点设置为 0,0,0。在后续运行中无法使用先前运行的坐标正确地重新加载 AR 场景,而无需定义上一次运行的点与新运行的点之间的关系。

    为了将先前的 ARKit 运行与新运行相关联,我们可以使用手动放置的地标,或使用某种对象识别来检测。让我们假设我们手动放置地标以简化。

    这是允许我们在后续运行之间保存和恢复 ARKit 场景的管道。

    • 初始场景 set-up 程序。

    • 开始我们的 ARKit 应用程序第一次运行,放置对象或玩游戏。

    • 允许 ARKit 初始化。

    • 在我们的环境中沿平坦的水平面选择两个参考点。例如,如果在室内,我们可以选择房间的两个角落。这些点将是我们用来重新加载我们的 ARKit 场景。

    • 根据需要在 ARSpace 中放置对象。完成后,将 AR 对象的位置和两个参考点保存到文件中。

    • 重新加载时,将相同的两个参考点放在我们先前保存的位置。通过定义这两个点,现在可以通过获取相对于旧点的位置,然后将它们相对于新定义的点放置,来重新加载先前位置中的资产。

    为了减少所需的用户交互,我们可以通过图像跟踪/检测来扩展它。当检测到地标图像或对象时,我们会自动将其在 ARSpace 中的位置设置为两个点之一。当检测到两个地标时,我们可以“自动”重新加载场景,如步骤 3 中所述。这将消除初始点放置错误。

相关问题