簡體   English   中英

如何將文件(3D model 文件)導入 c++ 中的緩沖區

[英]How to import a file ( 3D model file ) into a buffer in c++

** 更具體的問題 ** 如何將 3d 文件(數據類型未知)讀入 memory 以提供以下方法。

我只是想將一個文件(一個 3d model.stl 文件)導入 ZCD69B4957F06,然后將其傳遞給以下方法。

 const aiScene* ReadFileFromMemory(
        const void* pBuffer,
        size_t pLength,
        unsigned int pFlags,
        const char* pHint = "");

但我不知道如何為上述方法提供以下 2 個 arguments:

const void* pBuffer 
size_t pLength

有人可以為此提供一段代碼嗎? 如何使用 ifstream 從 memory 讀取文件(如“model.stl”),然后將其放入緩沖區並將其傳遞給上述方法

腫瘤壞死因子

附言。 ReadFileFromMemory 需要一個指向數據的指針。 數據可以是 char[]、std::string、std::vector<uint8_t> 或類似的。 任何在連續 memory 中保存原始數據並可以提供指向它的指針的東西

如何做到這一點?

===================== 更新 ======================

解決方案

    string readFile(const string& fileName)
 {
        ifstream ifs(fileName.c_str(), ios::in | ios::binary | ios::ate);

        ifstream::pos_type fileSize = ifs.tellg();
        ifs.seekg(0, ios::beg);

        vector<char> bytes(fileSize);
        ifs.read(bytes.data(), fileSize);

        return string(bytes.data(), fileSize);
    }

然后獲取緩沖區及其長度如下:

std::string my_file = readFile("models/model_file.ext");
   const char* pbuffer = my_file.data();
    size_t  plenght =  my_file.length();

要將文件加載到 memory,您可以使用這個,

std::ifstream file(file_path, std::ios::binary | std::ios::ate);

if(!file.is_open()) { /* Bail out if the file couldn't be loaded. */ }

size_t fileSize = file.tellg();
file.seekg(0);

char* pBuffer = new char[fileSize];
file.read(pBuffer, fileSize);

file.close();

// After everything is done.
delete[] pBuffer;

然后您可以將pBufferfileSize分別傳遞給pBufferlength參數。

Assimp 還在Importer class 中提供了一個簡單的ReadFile function,它可以為您完成所有這些工作。 您只需將資產文件的路徑和格式標志傳遞給它。

正如@MikeCAT 所說,pbuffer 是指向 memory 的指針,您的文件存儲在其中,pLength 是該緩沖區的大小(以字節為單位)。 在此處查看 function 規格: http://assimp.sourceforge.net/lib_html/class_assimp_1_1_importer.html#a9b3c5e8b1042702f449e84a95b3

暫無
暫無

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

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