如何从实例方法捕获节点"renderer(_:nodeFor:)"?



我对planeDetection激活时调用的这个委托方法感到困惑。当检测到平面时,该方法被成功调用,但是返回的SCNNode去哪里?我如何访问它?

func renderer(_ renderer: SCNSceneRenderer, 
nodeFor anchor: ARAnchor) -> SCNNode? 

为了它的价值,我使用了一个自定义的ARCL库,它允许我通过GPS坐标放置节点。出于某种原因,在这种框架下,这种方法似乎不会在发现飞机时开火。我的委托是正确设置的,因为renderer(_:nodeFor:)方法确实被调用了——否则我只会使用这个方法。

func renderer(_ renderer: SCNSceneRenderer, 
didAdd node: SCNNode, 
for anchor: ARAnchor) 

关于renderer(_:nodeFor:)实例方法为我们生成的新SCNNode,我们将该节点传递给ARKit, ARKit将其与相应的锚绑定以彻底跟踪其位置。

renderer(_:nodeFor:)方法返回的节点,作为子节点添加到SCNScene根节点。在跟踪arfaceanchor时,经常使用renderer(_:nodeFor:)方法。

var specialNode: SCNNode?
func renderer(_ renderer: SCNSceneRenderer, 
nodeFor anchor: ARAnchor) -> SCNNode? {
guard let sceneView = renderer as? ARSCNView, anchor is ARFaceAnchor 
else { return nil }
let faceGeometry = ARSCNFaceGeometry(device: sceneView.device!)!  
self.specialNode = SCNNode(geometry: faceGeometry)
return self.specialNode
}

func renderer(_ renderer: SCNSceneRenderer,
didUpdate node: SCNNode,
for anchor: ARAnchor) {

if let faceAnchor = anchor as? ARFaceAnchor,
let faceGeo = node.geometry as? ARSCNFaceGeometry {
faceGeo.update(from: faceAnchor.geometry)
}
}

然而,您可以将renderer(_:nodeFor:)方法用于任何所需的锚类型。

最新更新