Dmitry
Dmitry

Reputation: 3

ARKit: Rendering multiple anchors and nodes in didUpdate method

Trying to update two different nodes in renderer(_ renderer:didUpdate:for:) method for different anchors looks like it let me update only one node, but I needed both: ARFaceAnchor and ARMeshAnchor How can I solve this problem?

// 1
    func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor ) {
        if let faceAnchor = anchor as? ARFaceAnchor {
            targetFaceGeometry = faceAnchor.geometry
        }
    }


&

// 2
   func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor ) {
        if let meshAnchor = anchor as? ARMeshAnchor {
            let geometry = createGeometryFromAnchor(meshAnchor: meshAnchor)
            geometry.firstMaterial?.colorBufferWriteMask = [.alpha]
            node.geometry = geometry
        }
    }

Upvotes: 0

Views: 298

Answers (1)

EmilioPelaez
EmilioPelaez

Reputation: 19884

You can handle both cases in a single function

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    if let faceAnchor = anchor as? ARFaceAnchor {
        targetFaceGeometry = faceAnchor.geometry
    } else if let meshAnchor = anchor as? ARMeshAnchor {
        let geometry = createGeometryFromAnchor(meshAnchor: meshAnchor)
        geometry.firstMaterial?.colorBufferWriteMask = [.alpha]
        node.geometry = geometry
    }
}

Upvotes: 0

Related Questions