2013-07-27 34 views
0

我正在使用assimp库来加载模型到我的ios应用程序。但对于一些大型模型文件,加载时间对于Mobil应用来说太长。无法通过使用导出器类导出模型与assimp

考虑转换处理时间。我决定在运行时间之前通过工具转换我的模型。

我的主要目标是将此场景写入文件。

我有非常基本的C++经验。 首先我尝试了assimp :: expoerter类。

我遵从assimp与出口设置。

但是,当我尝试使用导出方法我收到此错误消息。

No matching member function for call to 'Export' 

error capture

方法是存在的,但我不能使用它。

scene = (aiScene*) aiImportFile([[openPanel filename] cStringUsingEncoding:[NSString defaultCStringEncoding]], aiPostProccesFlags | aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_PreTransformVertices | 0); 

if (scene) { 

    NSString *pPath = [openPanel filename]; 
    pPath =[NSString stringWithFormat:@"%@%@", pPath, @"_new"]; 
    NSLog(@"New file Path : %@", pPath); 

    Assimp::Exporter *exporter = new Assimp::Exporter(); 
    exportFormatDesc = exporter->GetExportFormatDescription(0); 

    exporter->Export(scene, exportFormatDesc->id, pPath); 

    const aiExportDataBlob *blob = exporter->ExportToBlob(scene, exportFormatDesc->id); 
    size_t blobSize = blob->size; 
    aiString blobName = blob->name; 

} 

然后通过读Assimp::Exporter Class Reference给我用aiExportDataBlob创建文件的想法。

ExportToBlob返回内存缓冲区(BLOB)的链表,每提到一个输出文件(在大多数情况下,只会有一个过程的输出文件,但需要这种额外的复杂性,因为Assimp旨在支持各种文件格式)。

如果您打算使用内存中的数据,ExportToBlob特别有用。

const aiExportDataBlob *blob = exporter->ExportToBlob(scene, exportFormatDesc->id); 
size_t blobSize = blob->size; 
aiString blobName = blob->name; 

但我不知道写这篇blob到一个文件中。

任何意见或帮助表示赞赏。

回答

2

您要通过NSString *函数期望const char *。我对Objective-C并不熟悉,但我认为您希望[pPath UTF8String]能够获得指向NSString中C样式字符数组的指针。如果你确实需要出于某种原因,请记住delete它当你完成)。

+0

有关BLOB文件的任何建议? –

+1

@Amourreux:正如我在另一个问题中所说的,我不使用这个库;我只是阅读文档。但[blob结构](http://assimp.sourceforge.net/lib_html/structai_export_data_blob.html)为您提供了一个指向它在内存中写入的指针,所以'fwrite(blob-> data,1,blob-> size,文件)'应该工作,遍历'next'指针,直到你到达链的末尾。不过,我不知道为什么你想这样做,而不是直接导出到文件。 –

+0

实际上,我只是想创建一个结构(aiScene)的二进制文件。在这种情况下,场景结构。通过这种方式,我跳加载时间短。也许这是我对结构的误解。我不想使用导出类,因为导出器像转换器一样工作。 非常感谢您的建议。 –