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

标签 c# unity3d augmented-reality point-clouds arkit

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

我知道这需要存储一些关于相机相对于一个点的位置的信息,然后在重新启动应用程序时,需要在相机重新启动时的新位置与其之前的位置之间进行某种转换记录点的 session ,然后使用此信息将点放置在正确的位置。通过查看 ARKit 文档,我不确定如何使用 native 界面实现这一点,我更不确定如何使用 Unity 插件实现它。如果有人至少可以指导我使用最容易实现上述功能的统一插件或原生 ARKit 界面的元素,我将不胜感激。

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

最佳答案

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

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

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

  1. 初始场景设置过程。

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

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

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

关于c# - 存储 ARKit 点云数据并检索显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45275115/

相关文章:

c# - 变量值未在字符串中更新

c# - 为什么我的角色/相机在 Unity 2d 中卡顿?

android - Android 上的增强现实 : which version of the OS would be needed?

c# - 空检查何时可以引发NullReferenceException

c# - 选择特定行时禁用 gridview 刷新

c# - 主要输出的 Visual Studio 部署项目快捷方式 - 'Open file location' 不工作

ios - SceneKit 在多个透明平面上延迟阴影

c# - 通过mvvmcross进行非线性导航

c# - Raycast - 从 C# 转换为 UnityScript

ios - 几个带有 ARKit 的二维码