簡體   English   中英

在 ASSIMP 中使用 LoadModelFromMemoy 加載 obj model 沒有加載紋理

[英]Use LoadModelFromMemoy in ASSIMP to load obj model with no texture loaded

我目前正在處理一個 Android 項目,我需要在 Android 平台上使用 ASSIMP 加載 .obj 文件。 我的實現方式是先使用 AssetManager 將 .obj 文件加載到 memory,然后使用importer.ReadFileFromMemory() function 創建aiScene object。我已經設法導入所有頂點數據,但我發現紋理丟失。 我實際上是從 ASSIMP GitHub 頁面上讀到的,其中提到ReadFileFromMemory()不會跨文件讀取內容,因此我認為它沒有讀取應用紋理的 .mtl 文件。 我想使用importer.ReadFile() function,但我不知道如何在 Android 平台上使用它。 有人有建議嗎?

附件是我對loadModelFromMemory的實現,類似於loadModel的 loadModel。


void Model::loadModelFromMemory(const void* pbuffer, size_t pLength)
{
    Log::Message("Enter loadModelFromMemory", LOG_INIT);

    // read file via ASSIMP
    Assimp::Importer importer;

    const aiScene* scene = importer.ReadFileFromMemory(pbuffer, pLength, aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs | aiProcess_CalcTangentSpace);

    // check for errors
    if(!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) // if is Not Zero
    {
        Log::Message(strcat("ERROR::ASSIMP::", importer.GetErrorString()), LOG_ERROR);
        return;
    }
    // process ASSIMP's root node recursively
    processNode(scene->mRootNode, scene);
}

我曾嘗試使用ReadFile ,但它不適用於 Android 上下文。 我還嘗試使用MemoryIOWrapper提供的 MemoryIOWrapper,但不知道從哪里開始。

有多種方法可以實現這一點。

  1. 通過 memory 緩沖區加載 mtl 和 obj 文件
  2. 使用 android 文件系統實現從手機上的資產文件夾加載資產。 您可以在Android 文件系統實現中找到我們的標題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM