【发布时间】:2018-10-26 21:24:45
【问题描述】:
我正在使用 assimp 将一些 .obj 文件转换为专有格式 assbin,以便在我正在编写的引擎中更快地加载它们。 我的代码是:
Assimp::Exporter Exporter;
Assimp::Importer Importer;
const aiExportFormatDesc* format = Exporter.GetExportFormatDescription(11);
const aiScene* pScene;
printf("Converting: Arbor Obj/Arbor");
pScene = Importer.ReadFile("Objects/Arbor Obj/Arbor.obj", aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs);
Exporter.Export(pScene, format->id, "Objects/Arbor Obj/Arbor.ass", aiProcess_Triangulate | aiProcess_GenSmoothNormals | aiProcess_FlipUVs);
它完美无缺,但我不知道如何保存压缩的 assbin 文件。 根据网上找到的文档,我确实知道这是可能的,但我不知道如何实现。
【问题讨论】:
-
你在说什么样的压缩?为什么你认为它应该在那里?在快速查看 assbin 编写器源代码后,我没有看到任何关于压缩支持的提示。当然,您可以使用 zlib/lz4/zstd/... 之类的通用压缩,但它与 assimp 并没有真正的关系。
-
让我想到这一点的文本之一就是这里的这篇文章:
-
const char* AICMD_MSG_DUMP_HELP = "assimp dump
[ ] [-b] [-s] [-z] [常用参数]\n" "\t -b 二进制输出\n" "\t -s Shortened \n" "\t -z Compressed \n" "\t[查看 assimp_cmd 文档以获取所有常用参数的完整列表] \n" "\t -cfast 快速后处理预设, 只运行几个重要步骤 \n" "\t -cdefault 默认后处理:运行所有推荐的步骤\n" "\t -cfull 触发几乎所有后处理步骤 \n" ; #include "../../code/assbin_chunks.h" 文件* out = NULL;布尔缩短 = false; -
// ---------------------------------------- ------------------------------------------------------- // 压缩二进制转储文件(从偏移量 head_size 开始) void CompressBinaryDump(const char* file, unsigned int head_size) { // 为简单起见 ... 再次将文件复制到内存中并在那里压缩 FILE* p = fopen(file,"r"); fseek(p,0,SEEK_END);常量 uint32_t 大小 = ftell(p); fseek(p,0,SEEK_SET); if (size
-
uLongf out_size = (uLongf)((size-head_size) * 1.001 + 12.);