【发布时间】:2020-04-16 02:04:12
【问题描述】:
ARKit 有问题。我的 3D 模型是 197MB 的 DAE 格式(没有 20MB 的纹理)。当我尝试在没有纹理的情况下在SceneKit 中加载我的模型时,一切都很好,但是当我使用纹理加载它时,我的应用程序出现了内存问题。我的纹理文件在 100kB 到 4MB 之间。当加载纹理时,我的应用程序在我的手机 (iPhone X) 上使用 1.84 GB RAM,这会导致内存问题。我一直在互联网上搜索,但找不到任何解决方案。有人可以给我帮助或建议吗?
我的代码:
self.shipNode = SCNNode(daePath: "art.scnassets/s.scn")!
extension SCNNode {
convenience init?(daePath: String) {
self.init()
guard let scene = SCNScene(named: daePath) else {
return
}
DispatchQueue.main.async { [weak self] in
for childNode in scene.rootNode.childNodes {
self!.addChildNode(childNode)
}
}
}
}
我是如何使用它的:
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
DispatchQueue.global().async { [weak self] in
if let imageAnchor = anchor as? ARImageAnchor {
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width,
height: imageAnchor.referenceImage.physicalSize.height)
plane.firstMaterial?.diffuse.contents = UIColor(white: 1, alpha: 0.8)
self?.planeNode = SCNNode(geometry: plane)
self?.planeNode.eulerAngles.x = -.pi / 2
self?.shipNode.position = SCNVector3Zero
self?.shipNode.position.z = 0.05
DispatchQueue.main.async { [weak self] in
self?.planeNode.addChildNode(self!.shipNode)
self!.node.addChildNode(self!.planeNode)
}
}
}
return node
}
【问题讨论】:
-
欢迎来到 Stack Overflow!我编辑了您的问题和正文的标题,以使其更易于阅读。我还更改了标签,以便更多了解该主题的人看到它。我还缩进了您的代码示例的格式,以便它正确呈现。祝你好运!
标签: swift scenekit augmented-reality arkit 3d-model