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

C# 存储ARKit点云数据并检索以显示,c#,unity3d,augmented-reality,point-clouds,arkit,C#,Unity3d,Augmented Reality,Point Clouds,Arkit,我希望存储使用ARKit和Unity记录的点云数据,以便能够检索和显示原始记录的数据。假设我只是以Unity插件中包含的UnityPointCloudExample.cs脚本的方式显示点云数据。但是,当检测到并显示某个点时,我还会存储有关该点的一些相关信息。然后我完全关闭应用程序。当我再次打开应用程序时,我希望能够将数据重新加载到最初检测到的相对于相机的相同位置,这是否可能使用ARKit和Unity插件 我知道这需要存储一些关于相机相对于点位置的位置的信息,然后在重新启动应用程序时,需要在重新启

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

我知道这需要存储一些关于相机相对于点位置的位置的信息,然后在重新启动应用程序时,需要在重新启动时相机的新位置和记录点的前一个会话中的位置之间进行某种转换,然后使用此信息将点放置在正确的位置。查看ARKit文档,我不确定如何使用本机接口实现这一点,更不确定如何使用Unity插件实现这一点。如果有人能告诉我unity插件或本机ARKit接口的元素,这些元素最容易实现上述功能,我将不胜感激


或者,如果这超出了ARKit/Unity插件当前状态的范围,那么解释这种情况的方式和原因也同样有帮助。谢谢

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

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

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

  • 初始场景设置程序

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

  • 重新加载时,将相同的两个参考点放置在先前保存的位置。定义了这两个点后,现在可以通过获取资源相对于旧点的位置,然后相对于新定义的点放置资源,从而在其以前的位置重新加载资源

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