【发布时间】:2014-10-10 22:52:23
【问题描述】:
我无法理解如何将 .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 下的场景图层次结构中的正确位置?
编辑#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 树中手动加载每个标识符。在我的文件中,有一个带有子标识符“ID2”和“ID10”的节点“SketchUp”。此方法不会让您加载根“SketchUp”。 (我得到一个运行时错误。)
【问题讨论】:
-
我已经发布了这个。这是一个链接。 stackoverflow.com/questions/25031774/…
-
谢谢。所以你的建议是使用
SCNSceneSource。不幸的是,这对我来说现在崩溃了。 -
您的代码中似乎有一个错误可以检索几何。该类应该是 SCNGeometry 而不是 SCNNode。例如:
let block = source.entryWithIdentifier("ID10", withClass: SCNGeometry.self) as SCNGeometry。有了这个修复,它对我有用。 -
是的,有一个错误。我将进行编辑。谢谢!
标签: ios swift scenekit collada