我很难理解如何将.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树中手动加载每个标识符。在我的文件中,有一个节点“SketchUp”,子标识符为“ID 2”和“ID 10”。这个方法不允许加载根“SketchUp”。(我得到一个运行时错误。)
7条答案
按热度按时间qnakjoqk1#
通常的模式是加载场景,然后使用以下命令检索您感兴趣的节点及其名称
然后,可以将此节点重新设置为主场景的父对象。
wrrgggsh2#
我有一个类似的问题,我有一个.dae文件,我想从该文件加载多个节点到一个节点。
首先,我设置了一个节点,它将把所有的节点放在一起,这样看起来就像它在原始文件中一样;接下来,我们导入所需的.dae文件,并复制其中的所有节点;最后,对于数组中的每个节点,我将其添加到该节点中。
gdrx4gfi3#
谢谢你的帮忙!
下面是一个简单的collada2Node类。
drkbr07n4#
ee7vknir5#
下面的答案对我不起作用。
以下是我在Xcode 7.0 beta 5、iOS 9.0 beta/Swift 2.0中的工作原理:
3D模型类型:Collada 3D模型名称:"型号. dae"
1.加载场景:
1.访问SCNScene中的子SCNode:
1.将灯节点从加载的场景添加到当前加载和查看的场景中:
self.scene
存在的原因是:在添加对象到场景之前,我已经根据场景工具包的例子做了一些场景设置。如果你需要代码,请在注解中提到它。
希望有帮助。
vuktfyat6#
8xiog9wr7#
我们发现的唯一可行的方法是:2023.
(1)非常简单地打开YourFileName.dae文件,使用普通的真实的文本编辑器,如VSCode。
请注意,该文件包含材质、效果等内容。
只需滚动到
library_geometries
,您将立即看到ID,在本例中为“geometry316”。
(Note
library_geometries
几乎总是文件的最后一行,很容易找到。)很简单,ID(例如“geometry316”)未显示在XCODE中,这只是Xcode的一个错误,他们可能很快就会修复。
(2)然后要获取并显示节点,只需:
就是这样。