0

我正在使用 assimp 库将模型加载到我的 ios 应用程序中。但是对于一些大型模型文件来说,加载时间对于移动应用程序来说太长了。

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

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

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

我在导出设置上遵守了 assimp 库。

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

No matching member function for call to 'Export'

错误捕获

方法在那里,但我不能使用它。

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写入文件。

任何建议或帮助表示赞赏。

4

1 回答 1

2

您正在传递NSString *函数期望的位置const char *。我不熟悉 Objective-C,但我认为您想[pPath UTF8String]NSString.

(此外,您正在泄漏Exporter:C++ 没有垃圾收集。我确定您不想创建它,new但是,如果出于某种原因确实需要,请记住delete完成后) .

于 2013-07-27T10:45:36.070 回答