我已经使用Scenekit
创建了360度图像查看器。在此查看器中,我只是创建一个sphere node
并将其附加到root node
的{{1}}上。我正在使用scene
相机拍摄的高分辨率图像作为该球节点的纹理。
我不明白为什么场景套件占用太多内存来显示360度图像。我的图片大小为Aleta
,而12MB
为resolution
。当我将场景加载到场景视图中时,我的内存使用量高达400 MB,这非常可怕,而且11520 x 5760
急剧下降到FPS
。
以下是我创建场景的代码:
10-20 FPS
//设置纹理...
// Camera node and sphere node...
var sphereNode : SCNNode!
lazy var cameraNode: SCNNode = {
let node = SCNNode()
let camera = SCNCamera()
node.camera = camera
return node
}()
// Material...
func getMaterial() -> SCNMaterial {
let material = SCNMaterial()
material.diffuse.mipFilter = .nearest
material.diffuse.magnificationFilter = .linear
material.diffuse.contentsTransform = SCNMatrix4MakeScale(-1, 1, 1)
material.diffuse.wrapS = .repeat
material.cullMode = .front
material.isDoubleSided = false
return material
}
// Setup scene...
func setup() {
self.scene?.rootNode.addChildNode(cameraNode)
let sphere = SCNSphere(radius: 8)
sphereNode = SCNNode()
sphere.segmentCount = 300
sphere.firstMaterial = getMaterial()
sphereNode.geometry = sphere
self.scene?.rootNode.addChildNode(sphereNode)
}
//纹理方法:
room.getSceneTexture { (image) in
DispatchQueue.main.async {
self.sceneView.updateMaterialTexture(image: image)
}
}
从摄像机捕获图像后,我将设置所捕获图像的内容。
请让我知道是否有人遇到func getSceneTexture(completion: @escaping (UIImage?) -> Void) {
guard let url = fileURL else {
completion(nil)
return
}
DispatchQueue.global().async {
guard let data = try? Data(contentsOf: url) else {
completion(nil)
return
}
DispatchQueue.main.async {
let image = UIImage(data: data)
completion(image)
}
}
return completion(nil)
}
内存问题。