[英]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.