为 iOS 12.0+ 更新 Swift 中的眼睛变换位置

Updating Eye Transform Position in Swift for iOS 12.0+

我想为 ARSession 中的 ARFaceGeometry 持续输出更新的眼睛变换矩阵。到目前为止,我已经写了以下内容,而不是不断更新位置,它只是输出初始位置并继续重复这些值。我已经尝试为眼睛位置实施 updateFeatures(for node: SCNNode,using anchor: ARFaceAnchor),但无法产生不同的结果。您是否有任何我没有注意到的提示/明显错误可能导致 eyeTransform 无法更新?

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    var leftEyeTransform: simd_float4x4 { get {
        return currentFaceAnchor!.leftEyeTransform}
        }
    print("Left Eye: \(currentFaceAnchor!.leftEyeTransform)")
    guard anchor == currentFaceAnchor,
        let contentNode = selectedContentController.contentNode,
        contentNode.parent == node
        else { return }
    selectedContentController.renderer(renderer, didUpdate: contentNode, for: anchor)    
}

在上面,currentFaceAnchor 是一个 let 常量,在 renderer(didAdd:) 方法中定义为 ARFaceAnchorcontentNode 是一个 let 常量定义为 contentController.renderer(nodeFor: faceAnchor).

您似乎没有使用渲染器函数作为参数提供给您的 anchoranchor 包含有关 face/eye 的所有更新信息。您所指的 currentFaceAnchor 仅包含您首次初始化面部锚点时的信息。如果您要添加以下内容,您应该会看到 leftEyeTransform.

中的更新值
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    guard #available(iOS 12.0, *), let faceAnchor = anchor as? ARFaceAnchor else { return }

    print("\(faceAnchor.leftEyeTransform)")
}