在适用于iOS 12.0+的Swift中更新眼睛变换位置

问题描述 投票:0回答:1

我想在ARFaceGeometry中为ARSession不断输出更新的眼睛变换矩阵。到目前为止,我已经写了以下内容,而不是不断更新位置,它只是输出初始位置并继续重复这些值。我已经尝试用眼睛位置实施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方法中定义为ARFaceAnchorrenderer(didAdd:)常数,而contentNode是定义为letcontentController.renderer(nodeFor: faceAnchor)常数。

swift arkit renderer ios12 scnnode
1个回答
1
投票

看起来你没有使用渲染器函数给你的anchor作为参数。 anchor包含有关脸部/眼睛的所有更新信息。您所指的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)")
}
© www.soinside.com 2019 - 2024. All rights reserved.