【发布时间】:2021-09-13 13:44:36
【问题描述】:
所以会话委托允许我获得一个包含相机图像 + 一些细节的帧。但是我怎样才能从 RealityKit 获得类似的东西。就像一帧渲染对象 + 没有背景的阴影?
我想用金属做我自己的后帧渲染。因此,让 realityKit 渲染漂亮的网格,然后自己对生成的帧进行调整并渲染到我自己的表面。
问候 大流士
【问题讨论】:
标签: swift arkit realitykit
所以会话委托允许我获得一个包含相机图像 + 一些细节的帧。但是我怎样才能从 RealityKit 获得类似的东西。就像一帧渲染对象 + 没有背景的阴影?
我想用金属做我自己的后帧渲染。因此,让 realityKit 渲染漂亮的网格,然后自己对生成的帧进行调整并渲染到我自己的表面。
问候 大流士
【问题讨论】:
标签: swift arkit realitykit
您可以向 RealityKit 的 ARView 添加会话代理:arView.session.delegate = sessionDelegate
以下是使用 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) {}
}
【讨论】: