我想在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
方法中定义为ARFaceAnchor
的renderer(didAdd:)
常数,而contentNode
是定义为let
的contentController.renderer(nodeFor: faceAnchor)
常数。
看起来你没有使用渲染器函数给你的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)")
}