如何在ARKit中检测垂直平面?

Jan*_* F. 49 ios swift ios11 arkit ios12

如何实现垂直平面检测(即墙壁)?

let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO
Run Code Online (Sandbox Code Playgroud)

Zac*_*ack 66

编辑:现在支持ARKit 1.5(iOS 11.3).简单地使用.vertical.出于历史目的,我保留了上面的帖子.


TL; DR

垂直平面检测不是(现在)ARKit中存在的特征.该.horizontal建议,这个功能可能处于工作状态,并可能在未来加入.如果它只是一个布尔值,这表明它是最终的.

确认

我在WWDC17与一位Apple工程师进行的一次对话证实了这种怀疑.

说明

您可能会争辩说,为此创建实现将是困难的,因为对于垂直平面而不是水平平面有更多的方向,但正如Rodamn所说,情况可能并非如此.

来自rodamn的评论: 最简单的是,一架飞机被定义为三个共面点.一旦沿表面检测到足够的检测到的共面特征(垂直,水平或任意角度),就有一个表面候选者.只是水平线的法线将沿着上/下轴,而垂直法线将平行于地平面.挑战在于,朴素的干墙往往产生很少的视觉特征,而平坦的墙壁往往不会被发现.我强烈怀疑这就是该.vertical功能尚未发布的原因.

但是,这有一个反驳的论点.有关更多信息,请参阅rickster的评论.

  • 这并不难.最简单的是,一个平面定义为三个共面点.一旦沿表面检测到足够的检测到的共面特征(垂直,水平或任意角度),就有一个表面候选者.只是水平线的法线将沿着上/下轴,而垂直法线将平行于地平面.挑战在于,朴素的干墙往往产生很少的视觉特征,而平坦的墙壁往往不会被发现.我强烈怀疑这就是为什么.vertical功能尚未发布的原因. (3认同)

jan*_*pio 6

iOS 11.3将支持此功能:

static var vertical: ARWorldTrackingConfiguration.PlaneDetection

会话检测与重力平行的表面(无论其他方向如何).

https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection https://developer.apple.com/documentation/arkit/arworldtrackingconfiguration.planedetection/2867271-vertical


小智 5

Apple发布的iOS 11.3将针对AR提供各种更新,包括ARKit 1.5.在此更新中,ARKit包括ARKit识别虚拟对象并将其放置在墙壁和门等垂直表面上的功能.

ARWorldTrackingConfiguration现在支持垂直支持

let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configuration)
Run Code Online (Sandbox Code Playgroud)