【问题标题】:geometry of the node from dae file is nildae 文件中节点的几何形状为零
【发布时间】:2016-04-14 12:16:48
【问题描述】:

我已经用搅拌机制作了 3d 模型,我想在场景工具包中使用它。

var platform = SCNNode();
let dae = SCNScene(named:"platform.dae");
platform = dae!.rootNode;
platform.position = SCNVector3(x: 0,y: 0,z:0);
if platform.geometry == nil {
    print("geo is nil.")
}
platform.geometry?.firstMaterial?.diffuse.contents = "wood.png";
platform.geometry?.firstMaterial?.diffuse.wrapS = SCNWrapMode.Repeat
platform.geometry?.firstMaterial?.diffuse.wrapT = SCNWrapMode.Repeat
platform.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: SCNPhysicsShape(node: platform, options: nil));
scene.rootNode.addChildNode(platform);

它总是打印出“geo is nil”。所以我无法为模型制作物理实体。谁能告诉我为什么会这样?

【问题讨论】:

  • 您可以在预览中查看 platform.dae 吗?您是在应用程序的根级别(正如您的电话所暗示的那样)还是在 scnassets 文件夹中(需要加载路径中该文件夹的名称)。另外:删除“var platform = SCNNode()”以支持“let platform = dae?.rootNode”。而且你不需要那些分号。
  • dae 不在 scnassets 文件夹中,但打印出来没有问题。我什至可以给它动作,但我不能改变材料,或者我不能用它的几何形状制作一个物理体。因为它的几何形状总是 nil。
  • 另外,我尝试将 dae 转换为 scn 文件。但是在我这样做之后,应用程序崩溃了。我认为 dae!.rootNode 返回 nil。是的,我将初始化方法更改为 SCNScene(named:"platform.scn")

标签: swift scenekit scnnode


【解决方案1】:

DAE 文件在加载时会返回一个完整的节点树。如果 Blender 文件有灯光和相机(几乎可以肯定),那么 DAE 的节点树也有。根 SCNNode 没有几何(并且不要求 SCNNode 有一个)。但你可以找到这样做的孩子。

print (platform)
platform.childNodes.map {
    print($0.name, $0.geometry)
}

生产

<SCNNode: 0x7fe008e938d0 | 3 children>
Optional("Camera") nil
Optional("Lamp") nil
Optional("Cube") Optional(<SCNGeometry: 0x7fe00ab08930 'Cube'>)

您可以使用childNodeWithName()childNodesPassingTest() 选择您想要的对象并将其添加到您的场景中。

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 1970-01-01
    • 2017-01-19
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2013-05-05
    • 2017-01-21
    相关资源
    最近更新 更多