通过Vision框架,我能够检测到QR码。我想做的下一件事是使用ARKit将SCNPlane精确地放置在QRCode上。我编写了以下代码,以查找QRCode在现实世界中的位置。但是SCNPlane总是添加在错误的位置。以下代码中的条形码变量为VNBarcodeObservation类型。

也许你们当中的一个知道我在做什么错。

let rect = CGPoint(x: barcode.boundingBox.origin.x, y: barcode.boundingBox.origin.y)
let hitTestResults = sceneView.hitTest(rect, types: [.existingPlaneUsingExtent, .existingPlane])
if let hitResult = hitTestResults.first {

    //TODO: change to width and height
    let plane = SCNPlane(width: 0.1, height: 0.1)
    let material = SCNMaterial()
    material.diffuse.contents = UIColor.red
    plane.materials = [material]

    let node = SCNNode()
    node.transform = SCNMatrix4MakeRotation(-Float.pi / 2, 1, 0, 0)

    node.position = SCNVector3(hitResult.worldTransform.columns.3.x,
                                         hitResult.worldTransform.columns.3.y,
                                         hitResult.worldTransform.columns.3.z)

    node.geometry = plane
    sceneView.scene.rootNode.addChildNode(node)
}

编辑:

添加了当前情况的图片。红色平面添加在左上角。但是,必须将该平面精确添加到QRCode上。

ios - ARKit和Vision –如何在找到的QR码上放置SCNPlane?-LMLPHP

最佳答案

使用中心点而不是原点为我工作:

let center2 = CGPoint(x: result.boundingBox.midX, y: result.boundingBox.midY)

let hitTestResults2 = frame.hitTest(center2, types: [.featurePoint/*, .estimatedHorizontalPlane, .existingPlane, .existingPlaneUsingExtent*/] )

关于ios - ARKit和Vision –如何在找到的QR码上放置SCNPlane?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47076673/

10-12 03:17