ARKit:通过添加锚点将USDZ模型放置到飞机上,但它始终在我的头顶上方

时间:2019-06-05 02:41:01

标签: swift augmented-reality arkit usdz aranchor

我是ARKit的新手,并且在小型项目中将对象添加到平面中。

我正在遵循Apple演示项目中的步骤:在增强现实中处理3D交互和UI控件。

如果我加载scn模型(或dae,obj)并放置在飞机上,请使用添加锚,它会完美工作。

但是当我更改时,请使用USDZ模型(从Apple下载)加载并始终将其放在我的头顶上方。我更改了使用添加子节点并设置位置但不起作用的效果,与添加锚点相同。

    // Test add usdz object
    guard let url = Bundle.main.url(forResource: "wheelbarrow", withExtension: "usdz"),
        let object = VirtualObject(url: url) else {
            print("Error usdz file")
            return
    }

    // Add Child Node not working
    //        let object = obj.clone()
    //        object.load()
    //        object.position = focusSquare.position
    //        sceneView.scene.rootNode.addChildNode(object)

    self.virtualObjectLoader.loadVirtualObject(object, loadedHandler: { [weak self] loadedObject in
        do {
            print("Load Virtual Object:\(object.referenceURL.absoluteString)")
            let scene = try SCNScene(url: object.referenceURL, options: nil)
            self?.sceneView.prepare([scene], completionHandler: { _ in
                DispatchQueue.main.async {
                    self?.placeVirtualObject(loadedObject)
                    loadedObject.isHidden = false
                }
            })
        } catch {
            print("Error: \(error)")
            fatalError("Failed to load SCNScene from object.referenceURL")
        }
    })

1 个答案:

答案 0 :(得分:1)

默认情况下,WheelBarrow.usdz文件的规模很大。

enter image description here

您需要将模型缩小到0.025(对于所有三个轴):

wheelBarrowNode.scale = SCNVector3(x: 0.025, y: 0.025, z: 0.025)

enter image description here

希望这会有所帮助。