我正在尝试在osx上测试库assimp(Lion 10.7.5)。但是Demo.app找不到位于Demo.app/Contents/Resources文件夹中的模型文件。奇怪的是,我的旧演示工作得很好。 这是主要代码:
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 :(得分:0)
从assimp的文档中,Assimp::Importer::ReadFile
将路径作为第一个参数。似乎没有(至少从文档中)对默认路径Resources
文件夹的任何特定支持。
很有可能你必须提供文件的完整路径才能从这些库中正确读取它,这意味着获取主包的资源路径,附加模型文件名,以及转换最终文件ac字符串的路径(将成为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
进行错误检查,因为目标-C代码将毫无问题地发送消息nil
。