[英]assimp segfault when accesing mesh data
我正在尝试使用 Assimp 加载我的 model(来自本教程)。 没有报告加载错误,但尝试从scene->mMeshes
访问网格时出现分段错误。 这可能是什么原因?
这是代码示例:
void resource_manager::load_model(std::string path)
{
model new_model;
const aiScene *scene = load_file(path);
new_model.meshes = load_meshes(scene, scene->mRootNode);
//...
}
const aiScene *resource_manager::load_file(std::string path)
{
Assimp::Importer import;
constexpr auto assimp_flags = 0 | aiProcess_JoinIdenticalVertices | aiProcess_Triangulate |
aiProcess_FlipUVs | aiProcess_ValidateDataStructure;
const aiScene *scene = import.ReadFile(path, assimp_flags);
if (scene == nullptr || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode)
{
//error handling is not called
}
return scene;
}
std::vector<mesh> resource_manager::load_meshes(const aiScene *scene, const aiNode *node)
{
std::vector<mesh> meshes;
for (int i = 0; i < node->mNumMeshes; i++)
{
mesh new_mesh;
auto current_aiMesh = scene->mMeshes[node->mMeshes[i]];
new_mesh.vertices = load_vertices(current_aiMesh);
//...
}
//...
}
std::vector<vertex> resource_manager::load_vertices(aiMesh *mesh)
{
std::vector<vertex> vertices;
for (unsigned int i = 0; i < mesh->mNumVertices; i++)//segfault occurs here
{
//vertex processing
}
//...
}
总而言之,代码看起来是正确的,但数据结构中可能存在一些故障。
您必须检查存储在节点中的索引是否有效并且在 0...mNumMeshes-1 范围内。 如果您在网格数组中获得越界访问,则可能会发生崩溃,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.