如何在ARKit中找到真实世界表面的方向

时间:2018-03-09 03:35:39

标签: ios swift arkit

我有ARHitTestResult后,如何查找有关其方向的信息。例如,一旦我使用命中测试找到墙,我怎么知道它的方向?

worldTransform矩阵似乎包含方向信息,但我发现无法提取它。

1 个答案:

答案 0 :(得分:0)

获得ARHitTestResult后,您将获得matrix_float_4x4。 通过访问第3列,您可以获得位置信息。 然后可以将其转换为SCNVector3,以便您可以定位SCNNode等,例如:

 override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    guard let touchLocation = touches.first?.location(in: augmentedRealityView),
    let hitTestResult = augmentedRealityView?.hitTest(touchLocation, types: .featurePoint),
    let resultPosition = hitTestResult.first?.worldTransform
    else { return }

    let matrixColumn = resultPosition.columns.3
    let worldVector = SCNVector3(matrixColumn.x, matrixColumn.y, matrixColumn.z)

    print("""
             X = \(matrixColumn.x)
             Y = \(matrixColumn.y)
             Z = \(matrixColumn.z)
        """)

    let sphereNode = SCNNode()
    let sphereGeometry = SCNSphere(radius: 0.1)
    sphereGeometry.firstMaterial?.diffuse.contents = UIColor.cyan
    sphereNode.position = worldVector
    sphereNode.geometry = sphereGeometry
    augmentedRealityView?.scene.rootNode.addChildNode(sphereNode)

}