簡體   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