为 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:)
方法中定义为 ARFaceAnchor
,contentNode
是一个 let
常量定义为 contentController.renderer(nodeFor: faceAnchor)
.
您似乎没有使用渲染器函数作为参数提供给您的 anchor
。 anchor
包含有关 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)")
}
我想为 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:)
方法中定义为 ARFaceAnchor
,contentNode
是一个 let
常量定义为 contentController.renderer(nodeFor: faceAnchor)
.
您似乎没有使用渲染器函数作为参数提供给您的 anchor
。 anchor
包含有关 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)")
}