gpt4 book ai didi

swift - ARKit 中渲染器和 session 方法的区别

转载 作者:行者123 更新时间:2023-12-05 03:53:52 24 4
gpt4 key购买 nike

我检查了以下两个示例代码: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的代码使用“renderer”获取BlendShape的值。

然而,检测 body 运动的代码使用“session”来获取值。

这两个代码似乎都是为了获取从 ARAnchor 更新的值。

“渲染器”和“ session ”有什么区别?

如何在不同时间使用这两个代码?

最佳答案

renderer(_:didUpdate:for:) session(_:didUpdate:) 实例方法都更新 AR 内容(相机/模型位置或一些特定数据,如面部表情)在 60 fps。它们的工作方式几乎相同,但目的不同。对于五个 renderer(...) 实例方法,您必须实现 ARSCNViewDelegate协议(protocol)。对于四个 session(...) 实例方法,您必须实现 ARSessionDelegate协议(protocol)。

官方文档说:

ARSCNViewDelegate's methods provide the automatic synchronization of SceneKit content with an AR session. And ARSessionDelegate's methods work directly with ARFrame objects.

主要区别在于:

  • 您必须为 ARKit+SceneKit copula 使用 renderer(_:didUpdate:for:) 实例方法,因为它适用于 ARSCNView 对象。

  • 另外,您可以对 ARKit+SceneKit copula 使用 session(_:didUpdate:) 方法,因为它也适用于 ARSCNView 对象。

  • 并且您必须对 ARKit+RealityKit copula 使用 session(_:didUpdate:) 方法,因为它适用于 ARView 对象。

关于swift - ARKit 中渲染器和 session 方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61453223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com