2016-01-08 10 views
5

Ich habe eine Wavefront OBJ Datei von einer URL importiert und möchte sie jetzt in meine Szene (SceneKit) auf meiner iOS 9 App einfügen (in Swift). Was ich bis jetzt getan habe, ist:Wie konvertiert man eine Wavefront OBJ Datei in einen SCNNode mit Model I/O

Irgendwelche Hilfe, die dieses in einen SCNNode umwandelt, würde geschätzt werden. Laut Apples docs:

Model I/O can share data buffers with the MetalKit, GLKit, and SceneKit frameworks to help you load, process, and render 3D assets efficiently.

Aber ich bin nicht sicher, wie Puffer von einem MDLAsset in eine SCNNode zu bekommen.

Antwort

7

Es stellt sich heraus, dass dies ziemlich einfach ist, da viele der ModelIO-Klassen bereits überbrücken. Ich tat import ModelIO, die mir Zugang zu allen ModelIO-Klassen und ebenfalls import SceneKit gab, die mir die SceneKit-Klassen gaben, aber mir fehlte import SceneKit.ModelIO, um die SceneKit-Unterstützung für ModelIO einzubringen.

let url = NSURL(string: "url-to-your-obj-here") 
let asset = MDLAsset(URL: url!) 
let object = asset.objectAtIndex(0) 
let node = SCNNode(MDLObject: object) 

So einfach ist das ...

+4

beachten Sie, dass '+ [SCNScene sceneWithURL: Optionen: Fehler:]' wird auch funktionieren. – mnuages

+2

Beachten Sie auch, dass das Parsen/Importieren von OBJ einige Kosten verursacht. Wenn es sich um ein Asset handelt, das Sie in/mit Ihrer App versenden, sollten Sie es in Xcode (oder mit Ihren eigenen Tools, die auf dem Mac ausgeführt werden, unter Verwendung von Model I/O) in '.scn' konvertieren. – rickster

+0

Danke @mnuages – guru