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

Col*_*inD 8 c# unity-game-engine augmented-reality point-clouds arkit

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

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

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

小智 1

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

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

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

  1. 初始场景设置程序。

    • 首次运行我们的 ARKit 应用程序,放置物体或玩游戏。
    • 允许 ARKit 初始化。
    • 在我们的环境中沿着平坦水平面选择两个参考点。例如,如果在室内,我们可以选择房间的两个角落。这些点将用于重新加载 ARKit 场景。
  2. 根据需要将对象放置在 ARSpace 中。完成后,将 AR 对象的位置和两个参考点保存到文件中。

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

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