У меня возникли проблемы с пониманием того, как геометрия из файлов .dae
должна быть загружена в график сцены iOS SceneKit.
Я знаю, что вы можете загружать файлы .dae
непосредственно в SCNScene:
// create a new scene
let scene = SCNScene("test.scnassets/test.dae")
Я также знаю, что вы можете создать пустой SCNScene и добавить в него встроенные 3D-объекты как дочерние узлы:
let scene = SCNScene()
var sphereNode = SCNNode()
sphereNode.geometry = SCNSphere(radius: 1.0)
scene.rootNode.addChildNode(sphereNode)
Во втором случае вы можете загрузить файл .dae
в SCNNode вместо использования встроенных объектов? Или ожидается, что все файлы .dae
необходимо сначала загрузить в SCNScene?
Если последнее верно, то как же вы поместите объекты SCNNode в нужное место в иерархии графа сцены под SCNScene? EDIT # 1:
Теперь это работает для меня, это модифицированная версия того, что предложил @FlippinFun.
let url = NSBundle.mainBundle().URLForResource("test.scnassets/test", withExtension: "dae")
let source = SCNSceneSource(URL: url, options: nil)
let block = source.entryWithIdentifier("ID10", withClass: SCNGeometry.self) as SCNGeometry
scene.rootNode.addChildNode(SCNNode(geometry: block))
Но может быть, есть лучший способ? Вышеупомянутое включает в себя ручную загрузку каждого идентификатора из дерева .dae. В моем файле есть node "SketchUp" с дочерними идентификаторами "ID2" и "ID10". Этот метод не позволит вам загрузить корневой "SketchUp". (Я получаю ошибку времени выполнения.)