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

bwleehnv  于 2023-04-19  发布在  Swift
关注(0)|答案(7)|浏览(189)

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

let configuration = ARWorldTrackingSessionConfiguration()
configuration.planeDetection = .horizontal //TODO
w8ntj3qf

w8ntj3qf1#

**编辑:**从ARKit 1.5(iOS 11.3)开始支持。只需使用.vertical。我保留了以前的帖子以供历史参考。

TL;DR

垂直平面检测还不是ARKit中存在的一个功能。.horizontal表明该功能可能正在开发中,并且可能会在未来添加。如果它只是一个布尔值,这将表明它是最终的。

确认

我在WWDC 17上与一位苹果工程师的谈话证实了这种怀疑。

说明

你可能会说,创建一个实现这将是困难的,因为有无限多的方向为一个垂直的平面,而不是一个水平的,但作为rodamn说,这可能不是这样的。
来自rodamn的评论:* 在最简单的情况下,平面被定义为三个共面点。一旦沿着表面检测到足够多的共面特征,您就有了一个表面候选(垂直、水平或任意Angular )。只是水平方向的法线将沿着上/下轴,而垂直的法线将平行于地平面。挑战在于,未装饰的干墙往往产生很少的视觉特征,而普通的墙壁可能经常无法被检测到。我强烈怀疑这就是为什么.vertical功能尚未发布的原因。*
然而,* 有一个相反的论点 *。更多信息请参见
rickster**的评论。

afdcj2ne

afdcj2ne3#

苹果已经发布了iOS 11.3,将为AR提供各种更新,包括ARKit 1.5。在此更新中,ARKit包括ARKit识别并将虚拟对象放置在墙壁和门等垂直表面上的能力。
ARWorldTrackingConfiguration现在支持垂直

let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
sceneView.session.run(configuration)
icomxhvb

icomxhvb4#

在ARKit 1.0中,只有.horizontalenum用于检测table或地板等水平表面。在ARKit 1.5及更高版本中,PlaneDetectionstruct.horizontal.vertical类型属性符合OptionSet协议
要在ARKit 2.0到ARKit 6.0中实现垂直平面检测,请使用以下代码:

configuration.planeDetection = .vertical

或者,可以使用两种类型的检测平面的值:

private func configureSceneView(_ sceneView: ARSCNView) {

    let config = ARWorldTrackingConfiguration()
    config.planeDetection = [.horizontal, .vertical]         //BOTH TYPES
    config.sceneReconstruction = .meshWithClassification
    config.isLightEstimationEnabled = true
    sceneView.session.run(config)
}

你也可以添加一个类的扩展来处理委托调用:

extension ARSceneManager: ARSCNViewDelegate {

    func renderer(_ renderer: SCNSceneRenderer, 
                 didAdd node: SCNNode, 
                  for anchor: ARAnchor) {

        guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
        print("Found plane: \(planeAnchor)")
    }
}
iszxjhcz

iszxjhcz5#

由于iPhone X配备了前置深度摄像头,我怀疑下一个版本会有一个后置摄像头,也许.vertical功能会被委派到那时。

jobtbby3

jobtbby36#

我用Unity做的,但我需要做我的数学。
我使用Random Sample Consensus从ARkit返回的点云中检测垂直平面。这就像有一个循环,随机选择3个点来创建一个平面,并计算与之匹配的点,看看哪个尝试是最好的。
它工作正常。但是因为当墙是纯色的时候,ARkit不能返回很多点。所以它在很多情况下不起作用。

3ks5zfa0

3ks5zfa07#

据说苹果正在为新iPhone开发额外的AR功能,即相机的额外传感器。当这些设备功能已知时,也许这将是一个功能。这里有一些猜测。http://uk.businessinsider.com/apple-iphone-8-rumors-3d-laser-camera-augmented-reality-2017-7和另一个来源https://www.fastcompany.com/40440342/apple-is-working-hard-on-an-iphone-8-rear-facing-3d-laser-for-ar-and-autofocus-source

相关问题