ARKit:使用添加锚点将USDZ模型放置在平面上,但它总是在我的头顶上方。

3

我是ARKit的新手,做了一个小项目,将对象添加到平面上。

我按照苹果公司演示项目中的步骤进行操作:在增强现实中处理3D交互和UI控制。

如果我加载scn模型(或dae、obj),并使用add anchor放置在平面上,它可以完美地工作。

但是当我改用USDZ模型(从Apple下载)进行加载和放置时,它总是出现在我的头上。我尝试使用addChildNode并设置位置,但没有效果,结果和使用addanchor相同。

    // 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个回答

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

希望这有所帮助。

谢谢。我还有一个问题?scn和usdz哪个更好,应该在场景中使用usdz还是在快速查看中更好。昨天我阅读了ARKit 3.0的文档和示例,而且在Apple的示例“处理增强现实中的3D交互和UI控件”中仍然使用了scn。 - Quyet Nguyen
1
usdz 是由 Pixar 开发的用于 3D 几何和相应纹理的文件格式。SceneKit 还支持 daeabcobj 文件格式。SCN 是 SceneKit 的场景文件,其中包含您的应用程序中所有几何图形。 - Andy Jazz
1
请看这个链接:https://dev59.com/5lYN5IYBdhLWcg3wAT5Y#55879013 - Andy Jazz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接