如何在SceneKit中将.dae文件转换为.scn文件

41
这是苹果的Fox示例代码截图。正如您所看到的,他们使用.scn文件格式作为图形对象。他们在wwdc2015视频中明确表示这是由艺术家完成的。到目前为止,我只使用过.dae,并且一直认为这是唯一支持的格式。我的问题是,如何将存储在.dae文件中的对象导出到.scn文件?

enter image description here

编辑:如果我进入“编辑器- > 转换为SceneKit场景文件格式(.scn)”,我会得到以下结果:

enter image description here


我对3D建模不是很了解(你用什么程序创建.dae文件?)。但我知道你不需要制作.scn模型,因为SpriteKit纹理可以是.png文件。 - DDPWNAGE
3个回答

38

不必导出.dae文件,您可以直接将对象放入.scn文件中:

enter image description here

.scnassets文件夹中创建新的.scn文件,然后将.dae文件拖到场景中。


太好了。谢谢。顺便问一下,你如何创建.scnassets文件夹?来自Resource面板的Assets Catalog模板不允许创建.scnassets文件夹。 - potato
1
如果你选择 New > Project > Game.scnassets 文件夹会被自动创建。 - l'L'l
1
或者,如果您从模板中选择“资源目录”,并在文件名提示中输入art.scnassts而不是xcassets,则Xcode会提示您是否要使用scnassets作为扩展名,只需选择“是”即可。 - Alex McPherson
我发现只有在PNG格式下,材料才能被转换 - 因为DAE对象也允许JPEG图像,所以将它们转换为PNG非常重要,否则它们将不会显示在转换后的SCN文件中! - Hecot

28

在SceneKit场景编辑器中打开您的DAE文件,然后转到“Editor”菜单并单击“转换为scn文件格式”。

您的美术工作者无法从其喜爱的工具中导出scn文件。您需要使用Xcode将DAE转换为SCN。


1
我用了你的方法,但是收到了一些奇怪的信息。我更新了问题,并附上了图片。在我点击转换后,我的捆绑包中没有 .scn 文件夹。它放在哪里了? - potato
1
请确保在Xcode beta中按下Cmd-S。根据您的选择(转换或复制),它应该替换或添加到DAE文件旁边。 - mnuages
1
奇怪的行为。在cmd-s之后它变成了红色。我不得不手动更改文件扩展名才能让它正常工作。 - potato
你的文档是属于一个开放的工作空间或项目吗?我们知道Xcode 7 beta 4存在一些问题。 - mnuages

0
你可以使用以下代码将 .dae 文件以编程方式转换为 .scn 文件。在 iOS 10.0+ 和 macOS 10.9+ 中,可以使用名为 write(to:options:delegate:progressHandler:) 的实例方法来完成此操作。
import SceneKit

class GameViewController: NSViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let sceneView = self.view as! SCNView
        sceneView.allowsCameraControl = true
        let dae = SCNScene(named: "art.scnassets/model.dae")!
        
        
        let path = FileManager.default.urls(for: .documentDirectory,
                                             in: .userDomainMask)[0]
                                          .appendingPathComponent("Model.scn")
        
        dae.write(to: path, options: nil, delegate: nil, progressHandler: nil)
        print(path)
        
        let scene = try! SCNScene(url: path)
        sceneView.scene = scene
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接