由于您尚未发布所有代码,因此很难提供“明确”的答案。
话虽如此,我已经为您创建了一个效果很好的示例。
首先我创建了一个[SCNNode] 来存储添加到屏幕上的任何SCNNodes:
//Array To Store Any Added Nodes To The Scene Hierachy
var nodesRendered = [SCNNode]()
然后我创建了 3 个不同的SCNNodes:
/// Creates A Red, Blue & Green SCNNode
func createNodes(){
//1. Create A Red Sphere
let redNode = SCNNode()
let redGeometry = SCNSphere(radius: 0.2)
redGeometry.firstMaterial?.diffuse.contents = UIColor.red
redNode.geometry = redGeometry
redNode.position = SCNVector3(-1.5, 0, -1.5)
redNode.name = "RedNode"
//2. Create A Green Sphere
let greenNode = SCNNode()
let greenGeometry = SCNSphere(radius: 0.2)
greenGeometry.firstMaterial?.diffuse.contents = UIColor.green
greenNode.geometry = greenGeometry
greenNode.position = SCNVector3(0, 0, -1.5)
greenNode.name = "GreenNode"
//3. Create A Blue Sphere
let blueNode = SCNNode()
let blueGeometry = SCNSphere(radius: 0.2)
blueGeometry.firstMaterial?.diffuse.contents = UIColor.blue
blueNode.geometry = blueGeometry
blueNode.position = SCNVector3(1.5, 0, -1.5)
blueNode.name = "BlueNode"
//4. Add Them To The Hierachy
augmentedRealityView.scene.rootNode.addChildNode(redNode)
augmentedRealityView.scene.rootNode.addChildNode(greenNode)
augmentedRealityView.scene.rootNode.addChildNode(blueNode)
//5. Store A Reference To The Nodes
nodesRendered.append(redNode)
nodesRendered.append(blueNode)
nodesRendered.append(greenNode)
}
完成此操作后,我创建了一个函数来确定这些是否在相机的截锥体中:
/// Detects If A Node Is In View Of The Camera
func detectNodeInFrustrumOfCamera(){
guard let cameraPointOfView = self.augmentedRealityView.pointOfView else { return }
for node in nodesRendered{
if augmentedRealityView.isNode(node, insideFrustumOf: cameraPointOfView){
print("\(node.name!) Is In View Of Camera")
}else{
print("\(node.name!) Is Not In View Of Camera")
}
}
}
最后在delegate 回调中我这样调用函数:
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
detectNodeInFrustrumOfCamera()
}
产生如下结果:
RedNode 不在摄像头范围内
BlueNode 不在摄像头范围内
GreenNode 在摄像头的视野中
希望它为您指明正确的方向...