【问题标题】:Detect a horizontal plane using ARKIT and capture its image使用 ARKIT 检测水平面并捕获其图像
【发布时间】:2019-09-06 15:13:52
【问题描述】:

我已经在使用 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)

    }

但是有什么方法可以让我获得检测到的平面并以某种方式捕获其图像?

【问题讨论】:

    标签: ios swift arkit


    【解决方案1】:

    确实如此,但我认为这并不简单。

    一旦您使用新的平面锚点获得委托调用*,您就可以从场景中捕获一帧,将平面的角计算为 3D 点,然后将其转换为屏幕点(SCNScene 有一些有用的方法可以做到这一点)。

    然后你必须以某种方式使用这四个屏幕点来修复图像的透视,并使用它们的固定值在转换后的图像上获得矩形,然后你可以裁剪它。

    我找到了一个和你需要的算法相似的算法,但它不是用 Swift 编写的https://github.com/bahmutov/fix-perspective

    *您也可以要求用户按下按钮以获得更好角度的照片。

    【讨论】:

    • 非常感谢!将检查并返回。
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 2019-09-11
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2016-07-12
    • 2018-05-11
    • 2022-01-25
    相关资源
    最近更新 更多