[英]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;
然后您可以將pBuffer
和fileSize
分別傳遞給pBuffer
和length
參數。
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.