我正在玩SceneKit和Swift(但Objective-C中的答案很好)。
我知道如何将collada文件加载到场景中。 (你可以把它加载到一个节点吗?)
这是我使用的Swift代码:
let url = NSBundle.mainBundle().URLForResource("weasel", withExtension: "dae")
var error: NSErrorPointer? = nil
let weasel = SCNScene.sceneWithURL(url, options: nil, error: error!)
(我不确定我声称错误的方式是多么惯用。请随意启发我。)
这似乎工作得很好,但我现在想在这个场景中插入一些东西(或整个场景,它并不重要)到另一个场景中。我已经得到了类似的东西来编译和运行,但它似乎不起作用。
let weaselNode = SCNNode()
weaselNode.geometry = SCNNode(geometry: weasel.rootNode.geometry)
scene.rootNode.addChildNode(weaselNode)
答案 0 :(得分:2)
您可以轻松地将部分Collada文件加载到节点中。我还没有时间去探索Swift,所以这里是ObjC:
NSURL *urlToColladaFile = [[NSBundle mainBundle]URLForResource:@"ColladaFileName" withExtension:@"dae"];
SCNSceneSource *sceneSource = [[SCNSceneSource alloc]initWithURL:urlToColladaFile options:nil]]
SCNNode *node = [sceneSource entryWithIdentifier:@"uidInColladaFile" withClass:[SCNNode class]];
[scene.rootNode addChildNode:node];
您可以通过在代码中的某处插入标识符来获取标识符列表:
NSLog(@"Scene identifiers list: %@", [sceneSource identifiersOfEntriesWithClass:[SCNNode class]);
答案 1 :(得分:1)
在这里,您只是检索根节点的几何(可能是nil)。您需要做的是从场景A中获取您感兴趣的节点(而不仅仅是几何体)并将它们添加到场景B中。
伪代码应为:
SCNNode *weaselNodeTree = [sceneA.rootNode childNodeWithName:
@"theObjectNameImLookingFor" recursively:YES];
(如果您不想修改场景A,则可选择weaselNodeTree = [weaselNodeTree clone];
)
[sceneB.rootNode addChildNode:weaselNodeTree];