我对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:)
方法用于任何所需的锚类型。