【发布时间】:2018-11-20 07:11:31
【问题描述】:
我正在向我之前从互联网下载的场景添加一个包含动画的3D model。在添加这个node 之前,我使用prepare 函数,因为我不想避免丢帧。但我仍然得到一个非常短的帧下降到大约 47 fps。这是由执行此prepare 函数引起的。我也尝试在其他调度队列上使用prepare(_:, shouldAbortBlock:),但这仍然没有帮助。有人可以帮我解决这个问题或告诉我为什么会这样吗?
arView.sceneView.prepare([mediaNode]) { [mediaNode, weak self] (success) in
guard let `self` = self else { return }
guard
let currentMediaNode = self.mediaNode as? SCNNode,
currentMediaNode === mediaNode,
!self.mainNode.childNodes.contains(mediaNode)
else { return }
self.mainNode.addChildNode(mediaNode)
}
顺便说一下,这是我用来加载这个模型的文件列表:
https://www.dropbox.com/s/7968fe5wfdcxbyu/Serah-iOS.dae?dl=1
https://www.dropbox.com/s/zqb6b6rxynnvc5e/0001.png?dl=1
https://www.dropbox.com/s/hy9y8qyazkcnvef/0002.tga?dl=1
https://www.dropbox.com/s/fll9jbjud7zjlsq/0004.tga?dl=1
https://www.dropbox.com/s/4niq12mezlvi5oz/0005.png?dl=1
https://www.dropbox.com/s/wikqgd46643327i/0007.png?dl=1
https://www.dropbox.com/s/fioj9bqt90vq70c/0008.tga?dl=1
https://www.dropbox.com/s/4a5jtmccyx413j7/0010.png?dl=1
DAE 文件已经由 Xcode 工具编译,因此可以在从 Internet 下载后加载。这是我下载后用来加载它的代码:
class func loadModel(fromURL url: URL) -> SCNNode? {
let options = [SCNSceneSource.LoadingOption.animationImportPolicy : SCNSceneSource.AnimationImportPolicy.playRepeatedly]
let sceneSource = SCNSceneSource(url: url, options: options)
let node = sceneSource?.entryWithIdentifier("MDL_Obj", withClass: SCNNode.self)
return node
}
【问题讨论】:
标签: swift scenekit augmented-reality arkit frame-rate