【问题标题】:SceneKit CFURLCreateDataAndPropertiesFromResource failed with error code -11SceneKit CFURLCreateDataAndPropertiesFromResource 失败,错误代码为 -11
【发布时间】:2014-02-17 17:55:46
【问题描述】:

我正在试用 SceneKit,我想做的一件事是从 COLLADA 文件加载场景。这很好用,但是,纹理没有加载,并且在加载文件时,我收到以下错误:

<Error>: ImageIO: CGImageSourceCreateWithURL CFURLCreateDataAndPropertiesFromResource failed with error code -11.

我认为这里的部分问题是我在应用程序包中组织文件的方式 - 一个名为 Textures.bundle 的文件包含所有纹理,按类别组织,一个 Models.bundle 包含 COLLADA 文件:

我编写了类来获取包的类别(文件夹)中的文件路径,它返回正确的路径。甚至 Xcode 也可以正确获取文件,并正确加载相同的 COLLADA 文件,甚至可以识别纹理包中的图像:

纹理位置设置为“相对于 DAE 文档”,生成以下(正确)路径:../../Textures.bundle/ModelTextures/Computer/motherboard_motherboard.jpg

然后,在应用程序中,它是这样呈现的:

有什么想法吗?

【问题讨论】:

  • 第一个问题,您是否在 Xcode 编辑器、预览和 QuickLook(在 Finder 中按空格键)对文件获得一致的结果,或者其中一个是否有此问题?第二个问题,您在 Xcode 编辑器中检查几何对象,其中一些是否具有颜色值以及顶点和法线?
  • Xcode、Preview 和 QuickLook 都能正确渲染模型。几何图形确实使用了几种材料,其中只有一种具有纹理,其余的是纯色,但没有一种是白色的。

标签: macos cocoa scenekit


【解决方案1】:

我知道 Xcode 和运行时使用不同的算法来查找 Scene Kit 的资源,所以它可以在一个而不是另一个中工作并不奇怪。 (Xcode 显然需要能够查看您的所有源代码,而运行时的则更具体地说明它会在哪里查看。)

也就是说,您能发布一下您的应用程序的 Resources 目录是什么样的吗?比如,如果你进入它并做一个ls -FR,你看到你期望的结构了吗?一切都复制进去好吗?

另外,如果这是同一个模型,你会遇到更多的问题,而不仅仅是你的纹理没有加载。我的意思是,这看起来很糟糕。您是否对加载的文件执行其他操作?

【讨论】:

  • 在查看编译后的产品时,确实看到了我期望的文件夹结构,如下:pastebin.com/4pJsgqzP 至于模型在运行时加载时看起来很奇怪,那是因为我没有设置正确的相机。在从磁盘解压缩模型并将它们添加到现有场景后,我使用 SCNSceneSource 从 COLLADA 文件中加载特定节点,但它并不总是正常工作。
  • 我进行了更多测试,并在模型加载后检查模型的 SCNMaterial,生成一个大小为 0x0 像素的 NSImage 作为其漫反射。
  • 我曾经与团队讨论过这个问题,因为我们遇到了问题。我不记得确切的结果,但我的记忆是,当你运行程序和在 Xcode 中时,解释不完整路径的方式是不同的。也许尝试使资源路径相对于资源文件夹?比如,去掉“../..”部分?
  • ……没关系,我是个白痴,不应该在课堂上写代码。消除“../..”部分就成功了!
猜你喜欢
  • 1970-01-01
  • 2018-03-03
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2016-01-28
相关资源
最近更新 更多