ARKit 在屏幕底部/底部显示地图

Posted

技术标签:

【中文标题】ARKit 在屏幕底部/底部显示地图【英文标题】:ARKit shows a map on floor/bottom of a screen 【发布时间】:2021-12-28 04:59:30 【问题描述】:

通过 ARKit,我想将室内地图放在地板上。 目前我尝试了两件事:

    我已将大型平面放置在摄像机下方和地板上方,但这会导致相当大的漂移。走路时动作不顺畅,整体体验也不是很丰富。 看到了一个可以识别水平面的解决方案,但它有其自身的问题。

那么真的有可能取得好的结果吗?

【问题讨论】:

【参考方案1】:

配备激光雷达的设备

LiDAR scanner 有其优点和缺点。 LiDAR 的主要优势在于它能够几乎立即重建地板和墙壁,然后您可以轻松地将任何 3D 模型附加到生成的表面 - 模型将稳定,不会漂移,因此用户的 AR 体验将是 压倒性的,正如你所说。此外,LiDAR 的一个重要优势是在光线不足和纹理不佳的环境中表现出色。

Here您可以阅读有关遮挡功能和一些 LiDAR 特性的信息。好消息:激光雷达与平面检测选项完美结合。

ARKit 将重建的场景细分为 ARMeshAnchors,让您可以访问多边形几何和表面分类。

ARMeshAnchor().geometry.classification
ARMeshAnchor().geometry.faces
ARMeshAnchor().geometry.vertices
ARMeshAnchor().transform.columns.3

没有激光雷达的设备

在没有激光雷达扫描仪的情况下,我们只能使用平面检测功能检测水平和垂直表面。我可以说所有 AR 框架(包括 ARKit 和 RealityKit)在定义水平表面方面都比垂直表面更好更快。

但是,与重建表面相比,检测到的平面不太稳定,因此有时可能会出现轻微的漂移。要成功完成平面检测阶段,您需要一个光线充足的房间和good-for-tracking 周围物体的纹理。

ARKit 使用 ARPlaneAnchor 为每个独特的垂直和/或水平表面调用您的代理的 renderer(_:didAdd:for:)。每个平面锚点都提供有关表面的详细信息——它的世界位置、尺寸和真实世界表面的分类。

除上述之外,还需要名为renderer(_:didUpdate:for:) 的委托方法将多个共面检测平面合并为更大的结果检测平面(例如地板表面)。

ARPlaneAnchor().classification
ARPlaneAnchor().extent
ARPlaneAnchor().alignment
ARPlaneAnchor().center

真的有可能取得好成绩吗?

是的,在这两种情况下,都可以在不漂移的情况下附加地图——无论您使用的是平面检测还是场景重建。

【讨论】:

以上是关于ARKit 在屏幕底部/底部显示地图的主要内容,如果未能解决你的问题,请参考以下文章

如何在布局底部更改我的相机位置

片段布局不覆盖整个屏幕

如何在屏幕底部显示小部件android

如何在容器底部显示 Snackbar 而不是屏幕颤动

如何设置字幕的位置,目前显示在屏幕底部,我们需要设置它从底部向上30px?

Kotlin 和 Firebase :根据点击的地图标记在底部工作表中显示不同的数据