0

assimp ライブラリを使用してモデルを iOS アプリにロードしています。ただし、一部の大きなモデル ファイルでは、モービル アプリの読み込み時間が長すぎます。

変換処理時間を考慮してください。実行前にツールでモデルを変換することにしました。

私の主な目標は、このシーンをファイルに書き込むことです。

私は非常に基本的な C++ の経験があります。最初に assimp::expoerter クラスを試しました。

エクスポート設定をオンにして assimp libary に準拠しました。

しかし、エクスポート メソッドを使用しようとすると、このエラー メッセージが表示されます。

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 は、それぞれが 1 つの出力ファイルを参照するメモリ バッファ (ブロブ) のリンクされたリストを返します (ほとんどの場合、もちろん出力ファイルは 1 つだけですが、Assimp は幅広いファイル形式をサポートすることを目的としているため、この追加の複雑さが必要になります) )。

ExportToBlob は、データをメモリ内で操作する場合に特に役立ちます。

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

しかし、このブロブをファイルに書き込む方法がわかりません。

アドバイスや助けをいただければ幸いです。

4

1 に答える 1

2

NSString *関数が期待する場所を渡していますconst char *。私は Objective-C に詳しくありませんが[pPath UTF8String]NSString.

(また、リークしていますExporter:C++にはガベージコレクションがありません。作成したくないと確信していますnewが、何らかの理由で作成する必要がある場合deleteは、完了したら覚えておいてください) .

于 2013-07-27T10:45:36.070 に答える