将几何从一个场景复制到另一个场景

时间:2014-06-03 23:28:19

标签: ios objective-c macos swift scenekit

我正在玩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)

2 个答案:

答案 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];