我是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")
}
})
usdz
是由 Pixar 开发的用于 3D 几何和相应纹理的文件格式。SceneKit 还支持dae
、abc
和obj
文件格式。SCN
是 SceneKit 的场景文件,其中包含您的应用程序中所有几何图形。 - Andy Jazz