【问题标题】:How to change a folder of Reference Images?如何更改参考图像的文件夹?
【发布时间】:2022-01-04 16:42:11
【问题描述】:

我正在尝试使用我的 iPad 和 Swift Playgrounds 4.0 进行编码。我尝试使用 SwiftUI example 1example 2 进行图像跟踪。 iPad App里面可以创建文件夹,但是这里不能放Image……所以下面的代码不起作用:

func makeUIView(context: Context) -> ARView {

    guard let referenceImages = ARReferenceImage.referenceImages(
                                                  inGroupNamed: "AR Resources",
                                                        bundle: nil) 
    else {
        fatalError("Missing expected asset catalog resources.")
    }
}

Here an Image from the Swift Playgrounds App

是否可以像使用 .usdz 模型一样使用根/主目录中的参考图像?

if let usdzModel = try? Entity.load(named: "drummer") {
    anchor.addChild(usdzModel)
}

这是完整的代码:

import ARKit
import SwiftUI
import RealityKit

struct RealityKitView: UIViewRepresentable {
    func makeUIView(context: Context) -> ARView {
        let view = ARView()
        
        // Start AR session
        let session = view.session
        let config = ARWorldTrackingConfiguration()
        config.planeDetection = [.horizontal]
        session.run(config)
        
        // Add coaching overlay
        let coachingOverlay = ARCoachingOverlayView()
        coachingOverlay.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        coachingOverlay.session = session
        coachingOverlay.goal = .horizontalPlane
        view.addSubview(coachingOverlay)
        
        // Set debug options
#if DEBUG
        view.debugOptions = [.showFeaturePoints, .showAnchorOrigins, .showAnchorGeometry]
#endif
        
        //AnchorEntity Bild
        
        let anchor = AnchorEntity(.image(group: "AR Resources", name: "Test"))
        // Create an image anchor by specifying the group name and image name of the AR resource
        let box = ModelEntity(mesh: .generateBox(size: simd_make_float3(0.1, 0.03, 0.05)))
        anchor.addChild(box)
        
        view.scene.anchors.append(anchor)
        
        //End AnchorEntity
        
        return view
    }
    
    func updateUIView(_ view: ARView, context: Context) {
    }
    
}

【问题讨论】:

  • documentation for ARReferenceImage defines an initializer 可以在您想使用不在 assets 文件夹中的图像时使用。
  • @EmilioPelaez 感谢您的快速响应!我是 Swift / AR 开发的新手,我用init(_ image: CGImage, orientation: CGImagePropertyOrientation, physicalWidth: CGFloat) 尝试了几件事,但没有任何效果......(我认为这是错误的?)

标签: swift swiftui augmented-reality arkit


【解决方案1】:

这是我的Medium story 的代码 sn-p。

这与 Xcode 不同,但并不比 Xcode 复杂。使用 Swift Playgrounds 应用右上角的 + 按钮将参考图像放在那里。

然后使用此代码。

import ARKit

let sceneView = ARSCNView(frame: .zero)
var trackingImages = Set<ARReferenceImage>()

fileprivate func feedSession() {
    
    let imageFromWeb = #imageLiteral(resourceName: "Photo.png")
    
    let image = ARReferenceImage(imageFromWeb.cgImage!, orientation: .up, 
                                                      physicalWidth: 0.5)
    
    self.trackingImages.insert(image)
    
    let config = ARImageTrackingConfiguration()
    config.trackingImages = trackingImages
    self.sceneView.session.run(config)
}

【讨论】:

  • 我编辑了我的 Swift 文件的完整代码。我没有得到它的工作..但感谢您的帮助:)
  • 我已经更新了我的答案。
  • Great Medium 故事.. 但我无法让它为我工作 :( 我认为问题在于我使用 SwiftUI 而不是 UIKit 和 ViewController / Playgrounds。
  • 你实现coordinator了吗?
  • 我不这么认为,但我是 Swift / AR 开发的新手。我想我需要更多的经验。第一篇文章是完整的代码。如果我尝试实现Coordinator 我会得到错误..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多