2

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

2 回答 2

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]);
于 2014-06-04T17:21:49.400 回答
1

在这里,您只是检索根节点的几何图形(可能为零)。您需要做的是从场景 A 中获取您感兴趣的节点(不仅仅是几何图形)并将它们添加到场景 B。

伪代码应该是:

SCNNode *weaselNodeTree = [sceneA.rootNode childNodeWithName:
                             @"theObjectNameImLookingFor" recursively:YES];

(如果您不想修改场景 A,则可选weaselNodeTree = [weaselNodeTree clone];:)

[sceneB.rootNode addChildNode:weaselNodeTree];
于 2014-06-03T23:45:14.410 回答