gpt4 book ai didi

ios - 在不阻塞主线程的情况下向 SceneKit SCNScene 添加多个节点

转载 作者:行者123 更新时间:2023-11-29 11:41:20 26 4
gpt4 key购买 nike

我正在构建一个 ARKit + SceneKit 应用程序,它需要在现实世界中显示模型。每次用户选择一个按钮时,模型都会改变。

我尝试在按下按钮时将新模型加载到节点中,然后将其添加到场景的根节点,但这会导致相机卡住几秒钟,直到它被添加到场景中。

然后我读到最好在开始时加载所有节点(viewDidLoad 或其他),调用场景的 prepare 方法,然后将节点添加到场景,但这会导致应用程序卡住几次,持续几秒钟,直到该过程完成。这就是我目前正在做的,但效果不佳!有任何想法吗?

请记住模型文件非常大(每个约 15MB)

func addNodesToScene() {
for menuItem in self.menuItems {
let tempScene = SCNScene(named: menuItem.modelPath)!
let node = tempScene.rootNode
node.scale = SCNVector3Make(0.1, 0.1, 0.1)
node.isHidden = true
self.foodNodes[menuItem] = node
print("\(menuItem.title) node loaded")
}

print("done loading nodes - adding to scene")
self.sceneView.prepare(Array(self.foodNodes.values), completionHandler: { (success) in
for nNode in self.foodNodes.values {
self.sceneView.scene.rootNode.addChildNode(nNode)
}
})
}

最佳答案

prepare 方法准备模型(和纹理)以快速加载到 GPU 上。您的函数实质上将两个函数合二为一,从 .SCN 文件加载节点并为 GPU 准备它们。例如,prepare 方法可以防止高帧率游戏中的卡顿,它不会解决加载 15 mb 模型的问题。

如果您要加载 15MB 的模型,您肯定会在某处出现延迟。 15MB 的模型应该提供如此多的细节,以至于延迟(在启动应用程序时)是可以接受的。如果您需要其中的多个,那么这里真正的问题可能是模型的大小。你能举个例子吗?

关于ios - 在不阻塞主线程的情况下向 SceneKit SCNScene 添加多个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46394677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com