我试图在swiftUI项目中使用ARKit imageDetection功能,但在实现渲染器时遇到麻烦。到目前为止,这是发生的事情: 在Xcode 11.2中,可以使用swiftUI启动一个新的ARKit项目。 UIViewRepresentable协议用于返回ARView的ARViewContainer结构中。在该结构内部创建了一个ARView对象/ var,该“ arView”显然具有“会话” vobject。 我想我可以像使用SceneKit一样设置这个(AR)会话对象:
struct ScanARViewContainer: UIViewRepresentable {
makeUIView(context: Context) -> ARView {
//let arView = MyARView(frame: .zero)
// changed this line to the following to have an own renderer
let arView = ARView(frame: .zero, cameraMode: ARView.CameraMode.ar, automaticallyConfigureSession: false)
guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else {
fatalError("Missing expected asset catalog resources.")
}
let configuration = ARWorldTrackingConfiguration()
configuration.detectionImages = referenceImages
arView.session.run(configuration, options: [.resetTracking, .removeExistingAnchors])
return arView
}
代码编译时没有任何抱怨,将其发送到电话时,AR会话已开始并且似乎可以执行任何操作。 下一步将是更改渲染器以显示检测到的图像。在SceneKit中,需要利用ARSCNViewDelegate(图像检测结果)。这就是我卡住的地方。 我尝试首先创建自己的myARView类,以获取对ARSessionDelegate的访问权限,希望能够访问didadd锚定函数。
class MyARView : ARView, ARSessionDelegate {
required init(frame: CGRect) {
super.init(frame: frame, cameraMode: ARView.CameraMode.ar, automaticallyConfigureSession: false)
self.session.delegate = self
}
}
然后我想在ARViewContainer结构中使用这个“新”类:
let arView = MyARView(frame: .zero, cameraMode: ARView.CameraMode.ar, automaticallyConfigureSession: false)
//old : let arView = ARView(frame: .zero, cameraMode: ARView.CameraMode.ar, automaticallyConfigureSession: false)
但是编译器抱怨“类型'ARViewContainer'不符合协议'UIViewRepresentable'。 或在声明
时出现这样的抱怨:“表达类型不明确,没有更多上下文” let arView = MyARView(...'
有人知道如何正确执行此操作吗?
答案 0 :(得分:0)
我想我在这里找到了有关如何“捕获”委托回调的良好灵感。 ARKit & Reality composer - how to Anchor scene using image coordinates
感谢马克D