【问题标题】:RealityKit - How to get rendered frame?RealityKit - 如何获得渲染帧?
【发布时间】:2021-09-13 13:44:36
【问题描述】:

所以会话委托允许我获得一个包含相机图像 + 一些细节的帧。但是我怎样才能从 RealityKit 获得类似的东西。就像一帧渲染对象 + 没有背景的阴影?

我想用金属做我自己的后帧渲染。因此,让 realityKit 渲染漂亮的网格,然后自己对生成的帧进行调整并渲染到我自己的表面。

问候 大流士

【问题讨论】:

    标签: swift arkit realitykit


    【解决方案1】:

    TLDR

    您可以向 RealityKit 的 ARView 添加会话代理:arView.session.delegate = sessionDelegate

    SwiftUI

    以下是使用 SwiftUI 实现会话委托的方法:

    class SessionDelegate<ARContainer: UIViewRepresentable>: NSObject, ARSessionDelegate {
        var arVC: ARContainer
        var arGameView : ARView?
        
        init(_ control: ARContainer) {
            self.arVC = control
        }
        
        func setARView(_ arView: ARView){
            arGameView = arView // get access the arView
        }
        
        func session(_ session: ARSession, didUpdate anchors : [ARAnchor]) {}
        func session(_ session: ARSession, didUpdate frame: ARFrame) {
           print("frame", frame)    
        }
        func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {}
        func session(_ session: ARSession, didRemove anchors: [ARAnchor]) {}
    }
    

    通过makeCoordinator 函数将您的委托提供给您的UIViewRepresentable

    struct CameraARContainer: UIViewRepresentable {
        
        func makeCoordinator() -> SessionDelegate<Self>{
            SessionDelegate<Self>(self)
        }
        
        func makeUIView(context: Context) -> ARView {
            let arView = ARGameView(frame: .zero)
            arView.session.delegate = context.coordinator
            context.coordinator.setARView(arView)
            return arView
        }
        
        func updateUIView(_ uiView: ARView, context: Context) {}
    }
    

    【讨论】:

      猜你喜欢
      • 2020-06-15
      • 2018-09-12
      • 1970-01-01
      • 2021-10-06
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      相关资源
      最近更新 更多