2016-08-14 1 views
1

저는 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

한가지는을 사용하여 (각각의 새로운 cubeNodeemptyNode를 업데이트합니다.이 방법의 철저한 설명과 직렬 파견 큐 (계산을 배포) 그랜드 센트럴 파견 및 dispatch_apply를 사용하여 부하를 (분할된다 다른 문제 공간, 여전히 비싼 작업 속도를 높이기 위해) in this answer

로드를 별도의 유틸리티 프로그램에서 수행하는 것이 많은 도움이 될 것입니다. 장면을 만든 후에는 아카이브하십시오. 사용자가 직접 대면하는 프로그램에 해당 장면을 포함 시키십시오. 장면을 보관하는 것은 처음부터 만드는 것보다 훨씬 빠릅니다.

관련 문제