在场景中添加大量的自定义节点需要很长时间才能加载

我正在构build一个scenekit应用程序,但是我有一些更好的细节的问题。 我创build了一个scene ,我正在给它添加自定义的几何graphics,直到节点的数量达到大约100个,它才能正常工作。向场景添加大量节点是非常理想的,是否还有更简单的方法来实现?

  for i in 0..<modelArr!.count { let model = modelArr![i] let pos: [SCNVector3] = Parser.loadPosition(model) let norm:[SCNVector3] = Parser.loadNormals(model) let ind:[CInt] = Parser.loadIndices(model) let src = SCNGeometrySource(vertices: pos, count: pos.count) let norSrc = SCNGeometrySource(normals: norm, count: norm.count) //let indexData = NSData(bytes: ind, length: sizeof(CInt) * ind.count) let indexData = NSData(bytes: Array<CInt>(0..<CInt(ind.count)), length: ind.count * sizeof(Float)) let element = SCNGeometryElement(data: indexData, primitiveType: .Triangles, primitiveCount: pos.count / 3, bytesPerIndex: sizeof(Float)) let geo = SCNGeometry(sources: [src, norSrc], elements: [element]) let material = SCNMaterial() material.diffuse.contents = UIColor.redColor() material.specular.contents = UIColor.whiteColor() let cubeNode = SCNNode(geometry: geo) cubeNode.geometry?.firstMaterial = material emptyNode.addChildNode(cubeNode) } scn.rootNode.addChildNode(emptyNode) } 

我有大量的指数,法线和头寸。

你可以做的一件事情是使用Grand Central Dispatch dispatch_apply负载, dispatch_apply (分配计算)和一个串行调度队列(用每个新的cubeNode更新cubeNode 。对这种方法的详细解释(使用不同的问题空间,但仍然试图加快昂贵的操作)可以在这个答案中find。

什么会帮助很多是在一个单独的实用程序中加载。 创build场景后,将其归档。 将该场景embedded到面向用户的程序中。 将场景解除存档要比从头创build要快得多。