SCNNode 未显示在 ARFrame 捕获的图像中



我在ARSCNView中添加了一个SCNNode:

func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
guard let faceAnchor = anchor as? ARFaceAnchor else { return nil }
guard let device = sceneView.device else { return nil }
guard let faceGeometry = ARSCNFaceGeometry(device: device, fillMesh: true) else { return nil }
let faceNode = FaceNode(faceGeometry)
// Node is a custom SCNNode class
let glassesNode = Node(image: UIImage(named: "glasses")!, position: .glasses, anchor: faceAnchor)
faceNode.addChildNode(glassesNode)
return faceNode
}

然后我使用这个委托函数为每个帧添加一个过滤器。问题是添加的SCNNode:glassesNodeframe.capturedImage中无法识别。因此,没有任何筛选器应用于SCNNode,而是应用于其他所有筛选器。

func session(_ session: ARSession, didUpdate frame: ARFrame) {
guard let image = CIImage(cvImageBuffer: frame.capturedImage)) else { return }
let filterImage = setFilter(image)
sceneView.scene.background.contents = context.createCGImage(filterImage, from: filterImage.extent)
}

唯一的解决方法是使用ARSCNView的snapshot()属性。效果很好。SCNNode会被过滤,但屏幕上的UI元素有太多延迟,这是一个问题。

我是否可以使用ARFrame的capturedImage并让它识别ARSCNView上的SCNNode?

使用ARFrame的capturedImage是不可能的。ARKit本身并不知道您正在使用SceneKit渲染3D内容,因此capturedImage将仅包含相机图像本身。

相关内容

  • 没有找到相关文章

最新更新