[英]In Scenekit how to split one SCNNode into many nodes?
我试图加载一个 .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 文件中获取),这也有效,但是渲染需要很长时间,我猜是因为我复制了每个节点的整个源。
听起来您已经找到了几种可以为您提供正确结果的方法,但是它们在运行时需要很长时间才能完成。 所以和那些一起跑,但要提前做。
在辅助程序中运行手动 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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.