2014-01-23 52 views
0

我试图在osx上测试库assimp(Lion 10.7.5)。但Demo.app无法找到位于Demo.app/Contents/Resources文件夹中的模型文件。奇怪的是,我的旧演示虽然工作正常。 这里的主要代码:os x应用程序无法加载资源文件夹中的文件

bool ImportModel(const string& pFile) 
{ 
    Assimp::Importer importer; 
    const aiScene* scene = importer.ReadFile(pFile, ...); 
    if(!scene) 
    { 
     cout<<importer.GetErrorString()<<endl; 
     return false; 
    } 
    return true; 
} 

int main(void) 
{ 
    while(ImportModel("skin.xml")); 
    return 0; 
} 

它使回报:无法打开文件“skin.xml”。 这里的Demo.app的结构:

Contents 
    Frameworks 
    info.plist 
    MacOS 
     Demo 
     libassimp.dylib 
    Resources 
     Demo.icns 
     skin.xml -> the model file. 

任何想法,可能是错的?多谢你们。

回答

0

从assimp的文档中,Assimp::Importer::ReadFile将路径作为第一个参数。似乎没有(至少从文档中),对默认文件夹路径的默认支持。

机会很好,您将不得不提供文件的完整路径,以便从这些库中正确读取它,这意味着获取主包的资源路径,附加模型文件名并转换交流字符串的最终路径(它将成为一个std :: string)。或者,您可以获取主包的资源路径,将其转换为c字符串并将skin.xml附加到该字符串。

如果您正在使用的Objective-C++,这是非常简单的:

NSBundle *bundle = [NSBundle mainBundle]; 
NSString *path = [bundle pathForResource: @"skin" ofType: @"xml"]; 
// now get the c string from the path 
const char *cPath =[path cStringUsingEncoding: NSUTF8StringEncoding]; 

如果你想保持到C++与基础,这是一个有点棘手,因为手动内存管理和更广泛的错误检查(对于上面的内容,只需要检查cPath的错误检查,因为Objective-C代码将在没有任何问题的情况下消息nil)。

+0

是的,我刚刚发现,我以前的“工作”演示使用GLFW3,它的glfwInit()完成这个捆绑工作。有问题。感谢您的详细解释:D – sindney

相关问题