改进 ARKit 中的平面检测 iOS Swift
Improve Plane Detection in ARKit iOS Swift
有没有什么方法可以改进 ARKit 平面检测并减少检测它所花费的时间?
在这里我们正在检测一个水平面,如果我们保持相机稳定,它需要时间来检测并且它在地板上不起作用。
对于 table 和其他类似表面,大约需要 5 到 6 秒。但对于楼层,它超过 20 分钟或半分钟,如果我们不移动相机,它根本不起作用。
这是我的代码:-
override func viewDidLoad() {
super.viewDidLoad()
SVProgressHUD.show(withStatus: "Detecting Plane and Getting ready")
sceneView.delegate = self
sceneView.session.delegate = self
sceneView.showsStatistics = false
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
configuration.isLightEstimationEnabled = true
sceneView.session.run(configuration)
sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]
}
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
if currentAnchor == nil {
currentAnchor = anchor
let light = SCNLight()
light.type = .directional
light.color = UIColor(white: 1.0, alpha: 1.0)
light.shadowColor = UIColor(white: 0.0, alpha: 0.8).cgColor
let lightNode = SCNNode()
lightNode.eulerAngles = SCNVector3Make(-.pi / 3, .pi / 4, 0)
lightNode.light = light
sceneView.scene.rootNode.addChildNode(lightNode)
let ambientLight = SCNLight()
ambientLight.type = .ambient
ambientLight.color = UIColor(white: 0.8, alpha: 1.0)
let ambientNode = SCNNode()
ambientNode.light = ambientLight
sceneView.scene.rootNode.addChildNode(ambientNode)
}
}
}
我猜地板很光滑,不够有质感。表面检测可能因多种原因而失败或花费太长时间——光线不足、表面反射过度、表面细节不足或相机运动过多。
试着四处走动,打开更多的灯,并确保表面有足够的纹理。
光滑的表面使 ARKit 难以检测到它们。表面的纹理越多,ARKit 检测到它的速度就越快。
有没有什么方法可以改进 ARKit 平面检测并减少检测它所花费的时间? 在这里我们正在检测一个水平面,如果我们保持相机稳定,它需要时间来检测并且它在地板上不起作用。
对于 table 和其他类似表面,大约需要 5 到 6 秒。但对于楼层,它超过 20 分钟或半分钟,如果我们不移动相机,它根本不起作用。
这是我的代码:-
override func viewDidLoad() {
super.viewDidLoad()
SVProgressHUD.show(withStatus: "Detecting Plane and Getting ready")
sceneView.delegate = self
sceneView.session.delegate = self
sceneView.showsStatistics = false
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
configuration.isLightEstimationEnabled = true
sceneView.session.run(configuration)
sceneView.debugOptions = [ARSCNDebugOptions.showFeaturePoints]
}
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
if currentAnchor == nil {
currentAnchor = anchor
let light = SCNLight()
light.type = .directional
light.color = UIColor(white: 1.0, alpha: 1.0)
light.shadowColor = UIColor(white: 0.0, alpha: 0.8).cgColor
let lightNode = SCNNode()
lightNode.eulerAngles = SCNVector3Make(-.pi / 3, .pi / 4, 0)
lightNode.light = light
sceneView.scene.rootNode.addChildNode(lightNode)
let ambientLight = SCNLight()
ambientLight.type = .ambient
ambientLight.color = UIColor(white: 0.8, alpha: 1.0)
let ambientNode = SCNNode()
ambientNode.light = ambientLight
sceneView.scene.rootNode.addChildNode(ambientNode)
}
}
}
我猜地板很光滑,不够有质感。表面检测可能因多种原因而失败或花费太长时间——光线不足、表面反射过度、表面细节不足或相机运动过多。
试着四处走动,打开更多的灯,并确保表面有足够的纹理。
光滑的表面使 ARKit 难以检测到它们。表面的纹理越多,ARKit 检测到它的速度就越快。