我希望存储使用ARKit和Unity记录的点云数据,以便可以像原始记录一样检索和显示它。假设我只是简单地显示UnityPointCloudExample.cs脚本的点云数据,它包含在Unity插件中。但是,当检测到并显示某个点时,我还会存储有关该点的一些相关信息。然后我完全关闭了应用程序。当我再次打开应用程序时,我希望能够在相对于相机的相同位置重新加载数据,就像最初检测到的那样,这是否可以使用ARKit和Unity插件原样?
我知道这需要存储有关相机相对于某个位置的相对位置的信息,然后在重新启动应用程序时,需要在相机重新启动时的新位置和之前的位置之间进行某种转换。记录点的会话,然后使用此信息将点放在正确的位置。通过ARKit文档,我不确定如何使用本机界面实现这一点,而且我更不确定如何使用Unity插件实现它。如果有人能够至少指导我使用Unity插件或本机ARKit接口的元素,这些元素最容易促进上述功能的实现,我将非常感激。
或者,如果这超出了当前状态下ARKit / Unity插件的范围,解释如何以及为什么会出现这种情况也同样有帮助。谢谢!
答案 0 :(得分:0)
当AR跟踪首次开始时,ARKit将原点设置为0,0,0。在后续运行中无法使用先前运行的坐标正确地重新加载AR场景,而无需定义上一次运行的点与新运行的点之间的关系。
为了将先前的ARKit运行与新运行相关联,我们可以使用手动放置的地标,或使用某种对象识别来检测。让我们假设我们手动放置地标以简化。
这是允许我们在后续运行之间保存和恢复ARKit场景的管道。
初始场景设置程序。
根据需要在ARSpace中放置对象。完成后,将AR对象的位置和两个参考点保存到文件中。
重新加载时,将相同的两个参考点放在我们之前保存的位置。通过定义这两个点,现在可以通过获取相对于旧点的位置,然后将它们相对于新定义的点放置来重新加载先前位置中的资产。
为了减少所需的用户互动,我们可以通过图像跟踪/检测来扩展它。当检测到地标图像或对象时,我们会自动将其在ARSpace中的位置设置为两个点之一。当检测到两个地标时,我们可以“自动”重新加载场景,如步骤3中所述。这将消除初始点放置错误。