2014-01-27 37 views
1

我正在尝试使用SceneKit,并且我想要做的事情之一是从COLLADA文件加载场景。这种运作良好,但是,纹理不加载,并且加载文件时,我收到以下错误:SceneKit CFURLCreateDataAndPropertiesFromResource失败,显示错误代码-11

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

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

xcode file tree

我写的类来获取文件中捆绑的类别(文件夹)的路径,它返回正确的路径。即使Xcode中可以得到的文件正确,并正确加载相同的COLLADA文件,甚至会在纹理包识别图像的点:

xcode COLLADA preview

质地位置被设置为“相对于DAE文件”得到以下(正确的)路径:../../Textures.bundle/ModelTextures/Computer/motherboard_motherboard.jpg

在应用中,随后将其呈现:

render output

任何想法?

+0

第一个问题,您是否在Xcode编辑器,预览和QuickLook(按Finder中的空格)文件之间获得一致的结果,或者其中一个是否存在此问题?第二个问题,你检查Xcode编辑器中的几何对象,它们中的一些是否具有颜色值以及顶点和法线? –

+0

Xcode,Preview和QuickLook均正确渲染模型。几何图形确实使用了几种材质,其中只有一种具有纹理,其余都是纯色,但没有一种是白色的。 –

回答

1

我知道Xcode和运行时使用不同的算法来查找Scene Kit的资源,所以它在一个而不是另一个中起作用并不令人感到意外。 (Xcode显然需要能够查看你的所有源代码,运行时版本更具体地看它的外观。)

这就是说,你可以发布你的应用程序的Resources目录的样子吗?就像,如果你进入它并做一个ls -FR,你看到你期望的结构?一切都复制好了吗?

另外,如果这是相同的模型,你会遇到更多的问题,而不仅仅是你的纹理没有加载。我的意思是,这看起来很糟糕。你是否在为加载的文件做其他事情?

+0

当检查已编译的产品时,确实看到了我期望的文件夹结构,如下所示:http://pastebin.com/4pJsgqzP 至于在运行时加载的模型,这是因为我没有设置正确安装摄像头。在从磁盘解压缩模型并将它们添加到现有场景之后,我使用SCNSceneSource从COLLADA文件加载特定节点,但它并不总是正确。 –

+0

我做了一些更多的测试,并且在模型加载后检查模型的SCNMaterial会产生一个尺寸为0x0像素的NSImage作为漫反射。 –

+0

由于我们遇到了问题,我曾与团队讨论过一次。我不记得确切的结果,但我的记忆是,当你运行程序和Xcode时,不完整路径的解释方式是不同的。也许尝试使资源路径相对于Resources文件夹?像,消除“../ ..”部分? –

相关问题