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