gpt4 book ai didi

ios - Scenekit中如何将一个SCNNode拆分成多个节点?

转载 作者:行者123 更新时间:2023-11-29 12:02:44 28 4
gpt4 key购买 nike

我正在尝试加载 .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)。将文件嵌入您的公共(public)项目中。解压一个 .SCN 文件比解析和实例化一个大的 OBJ 文件要快得多。

这是一个将场景存档到文件的函数。然后,您可以将该文件嵌入到您的项目中,并按照在模板代码中打开 spaceship 的方式打开它,或者使用 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
}

关于ios - Scenekit中如何将一个SCNNode拆分成多个节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36298501/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com