2013-07-27 65 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)的二進制文件。在這種情況下,場景結構。通過這種方式,我跳加載時間短。也許這是我對結構的誤解。我不想使用導出類,因爲導出器像轉換器一樣工作。 非常感謝您的建議。 –