Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在ARKit中检测垂直平面?_Ios_Swift_Ios11_Arkit_Ios12 - Fatal编程技术网

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

Ios 如何在ARKit中检测垂直平面?,ios,swift,ios11,arkit,ios12,Ios,Swift,Ios11,Arkit,Ios12,如何实现垂直面检测(即针对墙壁) 编辑:现在从ARKit 1.5(iOS 11.3)开始支持该功能。只需使用.vertical。出于历史原因,我保留了下面的前一篇文章 TL;博士 垂直面检测还不是ARKit中存在的特征。.horizontal表明此功能可能正在开发中,将来可能会添加。如果它只是一个布尔值,这将表明它是最终的 确认书 我在WWDC17与一位苹果工程师的对话证实了这一怀疑 解释 您可能会争辩说,为这一点创建一个实现是困难的,因为垂直平面的方向比水平平面的方向多得多,但正如rodam

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


编辑:现在从ARKit 1.5(iOS 11.3)开始支持该功能。只需使用
.vertical
。出于历史原因,我保留了下面的前一篇文章


TL;博士 垂直面检测还不是ARKit中存在的特征。
.horizontal
表明此功能可能正在开发中,将来可能会添加。如果它只是一个布尔值,这将表明它是最终的

确认书 我在WWDC17与一位苹果工程师的对话证实了这一怀疑

解释 您可能会争辩说,为这一点创建一个实现是困难的,因为垂直平面的方向比水平平面的方向多得多,但正如rodamn所说,情况可能并非如此

来自rodamn的评论: 在最简单的情况下,平面定义为三个共面点。一旦沿曲面(垂直、水平或任意角度)检测到足够多的共面特征,就有了候选曲面。只是水平面的法线将沿着上/下轴,而垂直面的法线将平行于地平面。挑战在于,未经修饰的干墙往往产生很少的视觉特征,而普通墙往往无法被发现。我强烈怀疑这就是
.vertical
功能尚未发布的原因


然而,有一个相反的论点。有关更多信息,请参阅rickster的评论。

编辑:现在从ARKit 1.5(iOS 11.3)开始支持该功能。只需使用
.vertical
。出于历史原因,我保留了下面的前一篇文章


TL;博士 垂直面检测还不是ARKit中存在的特征。
.horizontal
表明此功能可能正在开发中,将来可能会添加。如果它只是一个布尔值,这将表明它是最终的

确认书 我在WWDC17与一位苹果工程师的对话证实了这一怀疑

解释 您可能会争辩说,为这一点创建一个实现是困难的,因为垂直平面的方向比水平平面的方向多得多,但正如rodamn所说,情况可能并非如此

来自rodamn的评论: 在最简单的情况下,平面定义为三个共面点。一旦沿曲面(垂直、水平或任意角度)检测到足够多的共面特征,就有了候选曲面。只是水平面的法线将沿着上/下轴,而垂直面的法线将平行于地平面。挑战在于,未经修饰的干墙往往产生很少的视觉特征,而普通墙往往无法被发现。我强烈怀疑这就是
.vertical
功能尚未发布的原因


然而,有一个相反的论点。有关更多信息,请参见rickster的评论。

据说苹果正在为新iPhone开发额外的AR功能,即摄像头的额外传感器。当这些设备功能已知时,这可能会成为一项功能。这里有一些猜测。另一个消息来源

据说苹果正在为新iPhone开发额外的AR功能,即摄像头的额外传感器。当这些设备功能已知时,这可能会成为一项功能。这里有一些猜测。另一个来源

由于iPhone X配备了前向深度摄像头,我怀疑下一个版本中会有一个后向深度摄像头,并且可能会在那时授予垂直功能。

由于iPhone X配备了前向深度摄像头,我的怀疑是,下一个版本中会有一个背面朝上的版本,可能在那之前,
.vertical
功能将被授予。

我是团结地完成的,但我需要做我的数学

我使用随机样本一致性从ARkit返回的点云检测垂直面。这就像有一个循环,随机选取3个点来创建一个平面,并计算与之匹配的点,然后看看哪种尝试是最好的


它起作用了。但是因为当墙是素色时,它不能返回很多点。所以它在很多情况下都不起作用。

我是团结一致的,但我需要做数学题

我使用随机样本一致性从ARkit返回的点云检测垂直面。这就像有一个循环,随机选取3个点来创建一个平面,并计算与之匹配的点,然后看看哪种尝试是最好的


它起作用了。但是因为当墙是素色时,它不能返回很多点。因此,它在很多情况下都不起作用。

iOS 11.3提供了对此的支持:

静态变量垂直:ARWorldTrackingConfiguration.PlaneDetection

该任务检测平行于重力的曲面(无论其他方向如何)


iOS 11.3提供了对此的支持:

静态变量垂直:ARWorldTrackingConfiguration.PlaneDetection

该任务检测平行于重力的曲面(无论其他方向如何)


苹果发布了iOS 11.3,其中包括ARKit 1.5在内的各种AR更新。在此更新中,ARKit包括ARKit识别虚拟对象并将其放置在垂直表面(如墙和门)上的功能

ARWorldTrackingConfiguration现在支持垂直

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

苹果发布了iOS 11.3,其中包括ARKit 1.5在内的各种AR更新。在此更新中,ARKit包括ARKit识别虚拟对象并将其放置在垂直表面(如墙和门)上的功能

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

configuration.planeDetection = ARWorldTrackingConfiguration.PlaneDetection.vertical
private func configureSceneView(_ sceneView: ARSCNView) {

    let configuration = ARWorldTrackingConfiguration()
    configuration.planeDetection = [.horizontal, .vertical]    //BOTH TYPES
    configuration.isLightEstimationEnabled = true
    sceneView.session.run(configuration)
}
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)")
    }
}