从scenekit中的网络服务器加载collada文件

Posted

技术标签:

【中文标题】从scenekit中的网络服务器加载collada文件【英文标题】:Loading collada file from webserver in scenekit 【发布时间】:2016-12-05 19:00:26 【问题描述】:

我正在使用 SceneKit 和 Collada 文件。现在,我可以在 art.scnassets 文件夹以及我的项目根目录中加载 collada 文件。当我尝试从本地网络服务器加载文件时出现错误。为什么我不能这样做?

let url = NSURL(string: "http://localhost:8888/new.dae")
let scn = try! SCNScene(URL: url!, options: nil)


2016-07-31 17:41:29.537 bios[3863:254446] SceneKit IO: error, COLLADA files are not supported on this platform.
fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=259 "The document "new.dae" could not be opened." UserInfo=NSURL=http://localhost:8888/new.dae, NSLocalizedDescription=The document "new.dae" could not be opened., NSLocalizedRecoverySuggestion=Collada is not supported by this version of SceneKit: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-703.0.18.8/src/swift/stdlib/public/core/ErrorType.swift, line 54

我的目标是从网络服务器读取 collada 文件,然后让用户将文件下载到设备上。我不知道为什么我收到错误。顺便说一句,我做了一个文档预览来渲染文件,它即将成功地以 xml 渲染文档。因此,这不是访问文件的情况。请帮忙!

【问题讨论】:

【参考方案1】:

我为什么不能这样做?

不幸的是。

build 过程中,XCode 将您的 collada 编译为 .scn 文件。这是 Scenekit 特定的二进制文件格式,这样做可以减少资产文件的大小(collada 文件是基于 XML 的),从而提高加载性能。在 iOS 设备上运行的 SceneKit 不会加载 collada 文件,只会加载 .scn 文件。

您可以考虑使用 ModelIO 加载不属于您的应用程序的资源,但我注意到 collada isn't one of the supported formats。

【讨论】:

【参考方案2】:

您也可以像 Xcode 使用终端一样转换您的 dae 文件。 用带有dae的Xcode构建项目,检查Xcode执行的命令(搜索scntool) 相关:COLLADA transformations in SceneKit

【讨论】:

【参考方案3】:

我找到了AssetImportKit 框架来解决这个问题。该框架允许您在运行时(macOS 和 iOS)直接在 SceneKit 中导入 Assimp 支持的文件格式。该库支持:

几何材料(带有颜色、嵌入纹理和外部纹理) 相机和骨骼动画 序列化为 .scn 格式

【讨论】:

以上是关于从scenekit中的网络服务器加载collada文件的主要内容,如果未能解决你的问题,请参考以下文章

SceneKit + Collada + 动画

将 collada (dae) 文件加载到 SCNNode (Swift - SceneKit)

将 Collada dae 文件加载到 SceneKit 以进行联合操作

使用 SceneKit 从 DAE/COLLADA 中提取动画顶点

如何使用 SceneKit 从 COLLADA (.dae) 文件中获取几何图形

SceneKit - 停止连续循环 Collada 动画