我正在尝试使用 SceneKit 编写增强现实应用程序,并且需要使用SCNSceneRenderer 的 unprojectPoint方法给定 2D 像素和深度,从当前渲染帧获取准确的 3D 点。这需要 x、y 和 z,其中 x 和 y 是像素坐标,通常 z 是从该帧的深度缓冲区读取的值。
SCNView 的委托有这个方法来渲染深度帧:
func renderer(_ renderer: SCNSceneRenderer, willRenderScene scene: SCNScene, atTime time: TimeInterval) {
renderDepthFrame()
}
func renderDepthFrame(){
// setup our viewport
let viewport: CGRect = CGRect(x: 0, y: 0, width: Double(SettingsModel.model.width), height: Double(SettingsModel.model.height))
// depth pass descriptor
let renderPassDescriptor = MTLRenderPassDescriptor()
let depthDescriptor: MTLTextureDescriptor = MTLTextureDescriptor.texture2DDescriptor(pixelFormat: MTLPixelFormat.depth32Float, width: Int(SettingsModel.model.width), height: Int(SettingsModel.model.height), mipmapped: false)
let depthTex = scnView!.device!.makeTexture(descriptor: depthDescriptor)
depthTex.label = …Run Code Online (Sandbox Code Playgroud)