我正在构建一个scenekit
应用,但是我遇到了一些更精细的问题。我创建了一个scene
,我正在为它添加自定义几何体,它可以正常运行,直到节点数达到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)
}
我有大量的指数,法线和头寸。
答案 0 :(得分:0)
您可以做的一件事是使用Grand Central Dispatch拆分负载,使用dispatch_apply
(分配计算)和串行调度队列(用emptyNode
更新每个新cubeNode
可以找到这种方法的详尽解释(使用不同的问题空间,但仍然试图加快昂贵的操作)in this answer。
在单独的实用程序中进行加载有很大帮助。创建场景后,将其存档。将该场景嵌入面向用户的程序中。取消归档场景要比从头创建场景快得多。