ARKit——没有平面检测和命中测试的锚定

ARKit – Anchoring without Plane Detection and Hit-Testing

这是我之前的一篇帖子的后续问题。目前,我将 SCNNode 放置在现实世界中的已知坐标处。我的应用程序要求用户避免使用平面检测或命中测试,而是他们可以将对象放置在已知坐标处并希望它保持锚定在该位置。

目前,锚定的性能不是最理想的,我想找到改进它的方法。如果可能的话,我愿意提出任何建议。

提前致谢!

ARKit 4.0 解决方案

在最新版本的 ARKit 中,有一个名为 ARGeoAnchor 的 GPS 定位锚点(得益于 CoreLocation 框架的实现),它使用熟悉的初始化程序:

@nonobjc convenience init(coordinate: CLLocationCoordinate2D, 
                            altitude: CLLocationDistance?)

ARKit 3.0 解决方案

当然,您可以在没有 plane detectionhit-testing/ray-casting 的情况下将模型放置在 AR 场景中,尽管这可能会导致一些 AR 异常 - 您的模型可能会放置在场景的下方网格或模型可能放置在错误的位置,导致不正确的视差。

您的场景必须始终具备一件事 – 您的模型的锚点。如果没有该锚点,您的模型可能会漂浮在场景中,从而导致糟糕的用户体验。在平面检测的情况下,您会自动 ARPlaneAnchor 拴在不可见的平面上。

因此,让我们看看即使不使用平面检测和命中测试,也必须实施哪些方法才能获得强大的 AR 体验:

您可以单独或组合使用这些方法

But there is one unpleasant thing you must know about – a working distance for models in ARKit / SceneKit is up to 1000 meters. If your model goes beyond that limit you'll get flickering artifacts.