[英]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.