Assimp загрузка арматуры из блендера, вызывающая AI_SCENE_FLAGS_INCOMPLETE

Я работаю над системой скелетной анимации, используя assimp для разбора файлов .fbx. Я хочу получить возможность загрузить файл .fbx, содержащий только арматуру (скелет / риг). Затем я загружал эту арматуру в свою собственную структуру данных и назначал ссылку на нее как на член меша (несколько сеток, указывающих на одни и те же данные арматуры).

После загрузки моего файла .fbx, который содержит одну арматуру (экспортированную из блендера), assimp, похоже, загружает все, как ожидалось:

введите описание изображения здесь

Однако похоже, что бит AI_SCENE_FLAGS_INCOMPLETE по какой-то причине переворачивается, поскольку я нахожусь в следующем блоке:

if (this->aiScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)
{
    std::string errorMessage = this->aiImporter.GetErrorString();
    std::cout << "ERROR::ASSIMP::" << errorMessage << "\n";
    std::cin.get();
    exit(EXIT_FAILURE);
}

... только this->aiImporter.GetErrorString() возвращает пустую строку, не давая ответа на вопрос, почему это могло быть.

Итак, мой вопрос ... Почему бит AI_SCENE_FLAGS_INCOMPLETE становится истинным, когда загружается только якорь? Должен ли я просто проигнорировать это и продолжить свой веселый путь, или есть какие-то поводы для беспокойства?

(Да, я загрузил несколько других файлов, содержащих сетки без арматуры и сетки с арматурой, и об ошибках не сообщалось. Кажется, проблема возникает только с файлом, содержащим ТОЛЬКО арматуру.)

РЕДАКТИРОВАТЬ (снимок экрана с результатами отладки)  введите описание изображения здесь


person whitwhoa    schedule 05.04.2020    source источник
comment
В этом if есть несколько условий. Откуда вы знаете, что это второй с AI_SCENE_FLAGS_INCOMPLETE, который был true?   -  person Azeem    schedule 05.04.2020
comment
Поскольку есть aiScene и есть RootNode, так как я не смог бы успешно проанализировать любой элемент, если бы они оценивались как false ... плюс проверены в отладчике ... Я отредактирую блок кода, чтобы он был более понятным другим читателям. Спасибо что подметил это :)   -  person whitwhoa    schedule 05.04.2020
comment
Правильно. Ага. Отладочная информация поможет. Снимок подойдет.   -  person Azeem    schedule 05.04.2020
comment
Добавлен скриншот из отладчика. На самом деле особо не на что смотреть, просто переходит в блок и aiImporter.GetErrorString() возвращает пустую строку, как описано.   -  person whitwhoa    schedule 05.04.2020


Ответы (1)


Я считаю, что вы можете спокойно игнорировать это. Этот флаг просто устанавливается, когда нет загруженных сеток (что, если я правильно понимаю, в вашем случае намеренно).

Вы можете увидеть условие для этого флага здесь: https://github.com/assimp/assimp/blob/7e5a0acc48efc54d7aa7900c36cd63db1fbeec9b/code/Blender/BlenderLoader.cpp#L411-L417

person Slidy    schedule 05.04.2020