如何从 "renderer(_:nodeFor:)" 实例方法中捕获节点?
How to capture node from "renderer(_:nodeFor:)" instance method?
我对 planeDetection 处于活动状态时调用的委托方法感到困惑。检测到平面时方法调用成功,但是返回的SCNNode到哪里去了?我如何访问它?
func renderer(_ renderer: SCNSceneRenderer,
nodeFor anchor: ARAnchor) -> SCNNode?
为了它的价值,我使用了自定义 ARCL 库,它允许我通过 GPS 坐标放置节点。出于某种原因,在该框架下,这种方法似乎不会在检测到飞机时触发。我的委托设置正确,因为确实调用了 renderer(_:nodeFor:)
方法 - 否则我只会使用此方法。
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor)
关于新的 SCNNode,renderer(_:nodeFor:)
实例方法为我们生成,我们将此节点传递给 ARKit,ARKit 将其与相应的锚点绑定以彻底跟踪其位置。
由 renderer(_:nodeFor:)
方法返回的节点,作为子节点添加到 SCNScene 根节点。跟踪 ARFaceAnchors 时经常使用 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:)
方法与任何所需的锚点类型一起使用。
我对 planeDetection 处于活动状态时调用的委托方法感到困惑。检测到平面时方法调用成功,但是返回的SCNNode到哪里去了?我如何访问它?
func renderer(_ renderer: SCNSceneRenderer,
nodeFor anchor: ARAnchor) -> SCNNode?
为了它的价值,我使用了自定义 ARCL 库,它允许我通过 GPS 坐标放置节点。出于某种原因,在该框架下,这种方法似乎不会在检测到飞机时触发。我的委托设置正确,因为确实调用了 renderer(_:nodeFor:)
方法 - 否则我只会使用此方法。
func renderer(_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor)
关于新的 SCNNode,renderer(_:nodeFor:)
实例方法为我们生成,我们将此节点传递给 ARKit,ARKit 将其与相应的锚点绑定以彻底跟踪其位置。
由 renderer(_:nodeFor:)
方法返回的节点,作为子节点添加到 SCNScene 根节点。跟踪 ARFaceAnchors 时经常使用 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:)
方法与任何所需的锚点类型一起使用。