Swift ARKit中呈现器和会话方法之间的差异
我检查了以下两个示例代码: 以及: 提取面混合形状的代码使用“渲染器”获取混合形状的值 但是,检测身体运动的代码使用“会话”获取值 这两个代码似乎都是用于获取从ARAnchor更新的值 “渲染器”和“会话”之间有什么区别 如何在不同的时间使用这两个代码?同时使用Swift ARKit中呈现器和会话方法之间的差异,swift,augmented-reality,scenekit,arkit,realitykit,Swift,Augmented Reality,Scenekit,Arkit,Realitykit,我检查了以下两个示例代码: 以及: 提取面混合形状的代码使用“渲染器”获取混合形状的值 但是,检测身体运动的代码使用“会话”获取值 这两个代码似乎都是用于获取从ARAnchor更新的值 “渲染器”和“会话”之间有什么区别 如何在不同的时间使用这两个代码?同时使用渲染器(uu2;:diddupdate:for:)和会话(2;:diddupdate:)实例方法以60 fps的速度更新AR内容(相机或模型位置)。它们的工作原理几乎相同,但目的不同。对于五个renderer()实例方法,必须实现对协议的
渲染器(uu2;:diddupdate:for:)
和会话(2;:diddupdate:)
实例方法以60 fps的速度更新AR内容(相机或模型位置)。它们的工作原理几乎相同,但目的不同。对于五个renderer()实例方法,必须实现对协议的委托。对于四个session()实例方法,必须实现对协议的委托
一份官方文件说:
ARSCNViewDelegate的方法提供SceneKit内容与AR会话的自动同步。ARSessionDelegate的方法直接用于ARFrame对象
主要区别在于:
- 您可以对ARKit SceneKit“chain”使用
方法,因为它仅在ARSCNView中工作呈现器(u:didAdd:for:)
- 您可以对纯ARKit或ARKit RealityKit“链”使用
方法,因为它不仅在ARSCNView(ARKit)中有效,而且在ARView(ARKit+RealityKit)中也有效session(\uuux0:didUpdate:)
渲染器
用于检测地板,“会话”用于处理所有其他AR内容。我不太确定这样做是否正确是的,正如我在前面的评论中提到的,所有因素都很重要。模型的大小(多边形)和纹理的大小(像素)是最重要的两个!
func session(_ session: ARSession, didUpdate anchors: [ARAnchor])
{
for anchor in anchors
{
guard let bodyAnchor = anchor as? ARBodyAnchor else { continue }
let skeleton = bodyAnchor.skeleton
}
}
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor)
{
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
let blendShapes = faceAnchor.blendShapes
}