我尝试加载.obj文件。如何加载后,secenekit只生成一个具有巨大几何体的节点,该节点具有许多子网格。任何人都知道如何将这个巨大的节点分成许多节点,每个节点拥有一个原始节点的子网格?因为我需要对它们应用不同的物理。提前谢谢。
我尝试了以下方法:
加载文件后,我得到了庞大的节点。然后我做了
let geometry = SCNGeometry(sources: rootNode.geometry!.geometrySources, elements: [rootNode.geometry!.geometryElementAtIndex(count)])
geometry.firstMaterial = rootNode.geometry!.materials[count]
let node = SCNNode(geometry: geometry)
(从.obj文件获取) 这也有效,但需要很长时间才能渲染,我猜是因为我复制了每个节点的整个源代码。
答案 0 :(得分:1)
听起来您已经找到了几种方法可以为您提供正确的结果,但是它们在运行时需要很长时间。所以跟那些一起运行,但提前做好。
在辅助程序中运行手动OBJ解析或每元素几何检索。将结果归档到SCNScene
(或者SCNNodes
)。将存档/存档嵌入公共项目中。取消归档.SCN文件将比解析和实例化大型OBJ文件快得多。
这是将场景存档到文件的功能。然后,您可以将该文件嵌入到项目中,并按照模板代码中打开太空飞船的方式打开它,或使用Xcode场景编辑器进行调整。
func archiveToFile(fileName: String) -> Bool {
let data = NSKeyedArchiver.archivedDataWithRootObject(gameView!.scene!)
// Save data to file
let DocumentDirURL = try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true)
let fileURL = DocumentDirURL.URLByAppendingPathComponent(fileName).URLByAppendingPathExtension("scn")
print("FilePath:", fileURL.path)
if (!data.writeToURL(fileURL, atomically: true)) {
return false
}
return true
}