assimp, как сохранить сжатый файл assbin

Я использую 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 я не знаю. По документации, найденной в Интернете, я знаю, что это возможно, но я не знаю, как этого добиться.


person Helio Emery    schedule 26.10.2018    source источник
comment
О каком сжатии вы говорите? Как вы думаете, почему это должно быть там? После беглого просмотра исходного кода assbin writer я не вижу никаких намеков на поддержку сжатия. Конечно, вы можете использовать сжатие общего назначения, например zlib / lz4 / zstd / ... но на самом деле это не связано с assimp.   -  person keltar    schedule 27.10.2018
comment
Один из текстов, который заставил задуматься об этом, был здесь:   -  person Helio Emery    schedule 28.10.2018
comment
const char * AICMD_MSG_DUMP_HELP = assimp dump ‹model› [‹out›] [-b] [-s] [-z] [общие параметры] \ n \ t -b Двоичный вывод \ n \ t -s Сокращено \ n \ t -z Сжатый \ n \ t [Полный список всех общих параметров см. в документации assimp_cmd] \ n \ t -cfast Предустановка быстрой постобработки, выполняет всего несколько важных шагов \ n \ t -cdefault Постобработка по умолчанию: запускает все рекомендуемые шаги \ n \ t -cfull Запускает почти все шаги постобработки \ n; #include ../../code/assbin_chunks.h ФАЙЛ * out = NULL; bool сокращено = ложь;   -  person Helio Emery    schedule 28.10.2018
comment
// ------------------------------------------------ ----------------------------------- // Сжимаем файл двоичного дампа (начиная со смещения head_size) void CompressBinaryDump (const char * file, unsigned int head_size) {// для простоты ... снова копируем файл в память и сжимаем его там FILE * p = fopen (file, r); fseek (p, 0, SEEK_END); const uint32_t size = ftell (p); fseek (p, 0, SEEK_SET); если (размер ‹размер_головы) {fclose (p); возвращение; } uint8_t * данные = новый uint8_t [размер]; fread (данные, 1, размер, p);   -  person Helio Emery    schedule 28.10.2018
comment
uLongf out_size = (uLongf) ((размер-размер_головки) * 1.001 + 12.);   -  person Helio Emery    schedule 28.10.2018
comment
Прошу прощения за весь текст, но я новичок в публикации в Stack Overflow, и мне не удалось правильно вставить в него код. Пробовал ‹CTRL K›, но безрезультатно, а также ‹TAB› и помещал 4 пробела до или после текста ...)   -  person Helio Emery    schedule 28.10.2018
comment
В комментариях не может быть блоков кода, лучше отредактировать вопрос, включив в него требуемый код. Но неважно, я полагаю, вы говорите об отдельном инструменте конвертера, который выполняет сжатие само. Теоретически у AssbinExporter.cpp есть код для сжатия (простой zlib deflate, если на то пошло - не совсем уверен, что это было бы лучше всего), но на самом деле нет способа включить этот параметр, и в комментарии говорится только до тех пор, пока свойства не будут введены для экспортеров, что, как я полагаю, никогда не было. Поскольку в лучшем случае это zlib, я все же думаю, что было бы лучше реализовать сжатие где-нибудь еще.   -  person keltar    schedule 28.10.2018
comment
Также есть эта часть класса функции ExportSceneAssbin, в частности, в функции WriteBinaryDump: // Здесь данные не сжаты. Для сжатых файлов остальные // сжимаются с использованием стандартного DEFLATE из zlib. если (сжатый) {AssbinChunkWriter uncompressedStream (NULL, 0); WriteBinaryScene (& uncompressedStream, pScene);   -  person Helio Emery    schedule 28.10.2018
comment
На мой взгляд, единственное преимущество сохранения в assbin с включенным сжатием - это то, что другие инструменты, основанные на assimp, могут загружать его. Если это то, что вам нужно, я не вижу лучших способов, чем изменить assimp, перенести вывод в измененный заголовок, как это делает автономный преобразователь, или исправить полученный «файл» (изменить заголовок и заменить данные дефлированным).   -  person keltar    schedule 28.10.2018
comment
Извините, я не видел ваш ответ, прежде чем опубликовать оставшуюся часть моего ответа   -  person Helio Emery    schedule 28.10.2018
comment
Я понимаю, что вы сказали, я сам видел этот комментарий в коде. Вероятно, это то, что я сделаю. Спасибо за ответ!!   -  person Helio Emery    schedule 28.10.2018
comment
Как я могу проголосовать за ваш ответ как за хороший и полезный ?? (все еще новичок в этом)   -  person Helio Emery    schedule 28.10.2018


Ответы (1)


На данный момент запись сжатого формата assimp.xml или assimp.bin не поддерживается. Просмотрите этот запрос функции, чтобы следить за его выполнением.

person KimKulling    schedule 29.10.2018
comment
Спасибо за ответ. Я сделаю это и попробую и другие пути. Я опубликую, если найду что-нибудь полезное во время исследования - person Helio Emery; 31.10.2018