首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在加载SCNReferenceNode时usdz对象没有移动。

在加载SCNReferenceNode时usdz对象没有移动。
EN

Stack Overflow用户
提问于 2020-10-20 12:29:29
回答 1查看 325关注 0票数 2

我遵循Apple和示例项目,使用带有Virtual (SCNReferenceNode的子类)类的SCNReferenceNode文件加载3d对象,但突然之间,我需要将模型从.SCN更改为usdz。现在我的usdz对象正在成功加载,但它不是在表面(在空中的中途),我不能与它交互(点击,平底锅,旋转)。是否有其他方法可以与usdz对象进行交互,以及如何像以前使用.scn文件那样将其放在表面?

用于获取模型URL (从服务器下载)

代码语言:javascript
运行
复制
    static let loadDownloadedModel : VirtualObject = {
    let downloadedScenePath = getDocumentsDirectory().appendingPathComponent("\(Api.Params.inputModelName).usdz")
    
    return VirtualObject(url: downloadedScenePath)!
}()

从URL加载它

代码语言:javascript
运行
复制
    func loadVirtualObject(_ object: VirtualObject, loadedHandler: @escaping (VirtualObject) -> Void) {
    isLoading = true
    loadedObjects.append(object)
    
    
    // Load the content asynchronously.
    DispatchQueue.global(qos: .userInitiated).async {
        object.reset()
        object.load()

        self.isLoading = false
        loadedHandler(object)
    }
}

放置在场景中

代码语言:javascript
运行
复制
    func placeObjectOnFocusSquare() {
    virtualObjectLoader.loadVirtualObject(VirtualObject.loadDownloadedModel) { (loadedObject) in
              DispatchQueue.main.async {
                  self.placeVirtualObject(loadedObject)
                self.setupBottomButtons(isSelected: true)
              }
    }
}


func placeVirtualObject(_ virtualObject: VirtualObject) {
    guard let cameraTransform = session.currentFrame?.camera.transform,
        let focusSquarePosition = focusSquare.lastPosition else {
        statusViewController.showMessage("CANNOT PLACE OBJECT\nTry moving left or right.")
        return
            
    }
    Api.Params.selectedModel = virtualObject
    virtualObject.name = String(Api.Params.inputPreviewId)
    virtualObject.scale = SCNVector3(Api.Params.modelXAxis, Api.Params.modelYAxis, Api.Params.modelZAxis)
    virtualObject.setPosition(focusSquarePosition, relativeTo: cameraTransform, smoothMovement: false)
    updateQueue.async {
        self.sceneView.scene.rootNode.addChildNode(virtualObject)
    }
}

.usdz对象在中的应用

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-21 09:57:10

经过这么多的尝试,最后我发现这个模型的动态缩放引起了问题,参考了这一点。

iOS ARKit: Large size object always appears to move with the change in the position of the device camera

对于所有轴(x、y和z),我将对象缩放为0.01。

代码语言:javascript
运行
复制
        virtualObject.scale = SCNVector3Make(0.01, 0.01, 0.01)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64445193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档