我使用通用方式通过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格式导出。在“ // Breakpoint”中,设置断点以查看场景内容。还有一些奇怪的值:
我们可以看到,“场景”值是正确的:1个网格,0个其他对象,根节点不为null。
但是根节点具有意外值:
此奇怪的值会导致访问冲突或其他意外行为。
在docs中说,RootNode始终对任何文件格式有效,至少根节点具有0个子节点,并且自身可以包含网格。
注意:导入器处理场景的生存期。但是我仅在此功能范围内使用场景,因此它不是生命周期对象问题。
Assimp已针对x86平台进行了编译,但是使用该lib为x64平台进行了配置。非常奇怪,没有任何错误消息,而只是意外行为。