我检查了以下两个示例代码:https://developer.apple.com/documentation/arkit/capturing_body_motion_in_3d
func session(_ session: ARSession, didUpdate anchors: [ARAnchor])
{
for anchor in anchors
{
guard let bodyAnchor = anchor as? ARBodyAnchor else { continue }
let skeleton = bodyAnchor.skeleton
}
}
和:https://developer.apple.com/documentation/arkit/tracking_and_visualizing_faces
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
{
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
let blendShapes = faceAnchor.blendShapes
}
提取人脸的BlendShape的代码使用“渲染器”来获取BlendShape的值。
但是,检测身体运动的代码使用“会话”来获取值。
这两个代码似乎都用于获取从ARAnchor更新的值。
“渲染器”和“会话”之间有什么区别?
如何在不同时间使用两个代码?
renderer(_:didUpdate:for:)
和session(_:didUpdate:)
实例方法均以60 fps更新AR内容(相机或模型位置)。它们的工作原理几乎相同,但目的却不同。对于五个renderer()实例方法,您必须实现ARSCNViewDelegate协议的委托。对于四个session()实例方法,您必须实现ARSessionDelegate协议的委托。