Assimp mRootNode имеет недопустимые значения после разбора файла - PullRequest
0 голосов
/ 23 апреля 2020

Я использую generi c способ загрузки модели с assimp:

Error Mesh::loadFromFile(const std::filesystem::path& path) {
    Assimp::Importer importer;

    auto scene = importer.ReadFile(path.string(), aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_GenSmoothNormals | aiProcess_JoinIdenticalVertices);

    if (!scene)
        return { {std::string() + "Model importing error: " + importer.GetErrorString(), ErrorCode::General} };

    loadModel(scene); << // Breakpoint

    glRegisterData();

    return std::nullopt;
}

Я загружаю Monkey из блендера, экспортированного в формат FBX. В "// Точка останова" я установил точку останова, чтобы увидеть содержимое сцены. И есть некоторые странные значения:

скриншот просмотра сцены

Как мы видим, значения "сцены" верны: 1 me sh, 0 других объектов, root узел не является нулевым.

Но root узел имеет неожиданные значения:

  • mParent должен быть нулевым (я предполагаю), но есть некоторое значение.
  • mNumChildren - это случайное число. (должно быть 0 или 1)
  • mChildren - сломанный указатель
  • mNumMeshes - случайное число
  • mMeshes - также сломанный указатель
  • , но интересно , что mName является действительным.

Это странное значение вызывает нарушение прав доступа или другое непредвиденное поведение.

В документе указано, что RootNode всегда действителен для любого формата файла, по крайней мере root узел имеет 0 дочерних элементов и может содержать меня sh.

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

1 Ответ

0 голосов
/ 27 апреля 2020

Assimp был скомпилирован для платформы x86, но проект, который использует эту библиотеку, настроен для платформы x64. Очень странно, что не было никакого сообщения об ошибке, а только неожиданное поведение.

...