繁体   English   中英

在Scenekit中如何将一个SCNNode拆分为多个节点?

[英]In Scenekit how to split one SCNNode into many nodes?

我试图加载一个 .obj 文件。 加载后,secenekit 只生成一个具有巨大几何形状的节点,其中包含许多子网格。 任何人都知道如何将这个巨大的节点分成许多节点,每个节点拥有一个来自原始节点的子网格? 因为我需要对它们应用不同的物理。 提前致谢。

我尝试过以下方法:

  1. 手动解析 .obj 文件。 这有效,但占用了太多内存
  2. 加载文件后,我得到了巨大的节点。 然后我做

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM