我已经在使用ARKit和SceneKit在AR应用程序中检测水平面。
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = .horizontal
sceneView.session.run(configuration)
sceneView.delegate = self
这将在平面检测中调用委托方法。
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
// 1
guard let planeAnchor = anchor as? ARPlaneAnchor else { return }
// 2
let width = CGFloat(planeAnchor.extent.x)
let height = CGFloat(planeAnchor.extent.z)
let plane = SCNPlane(width: width, height: height)
}
但是有什么方法可以获取被检测到的平面并以某种方式捕获其图像吗?
答案 0 :(得分:1)
是的,但我认为这不会很简单。
使用新的平面锚点获得委托调用*后,您可以从场景中捕获帧,将平面的角计算为3D点,然后将其转换为屏幕点(SCNScene
有一些有用的方法为此)。
然后,您必须使用这四个屏幕点以某种方式将透视图固定在图像上,并使用它们的固定值获取转换后图像上的矩形,然后进行裁剪。
我发现了一种与您需要的算法相似的算法,但是它不是用Swift https://github.com/bahmutov/fix-perspective
编写的*您还可以要求用户按下按钮以获取具有更好角度的照片。