c++ - 将指针复制到 aiScene

标签 c++ assimp

我使用 Assimp 制作骨骼动画。因此,我总是需要它加载的数据。但由于某种原因,此数据变得不可访问并导致段错误。下面是问题代码:

static Mesh processMesh(const aiMesh *aimesh, const aiScene *scene) {
    Mesh mesh;
    mesh.ai_scene = scene;
    std::cout << mesh.ai_scene->mRootNode->mName.data; // OK

    ...
}

但是如果你在 Mesh 本身内部进行,它会导致错误。例如:

void boneTransform(float TimeInSeconds) {
    glm::mat4 identity = glm::mat4();
    std::cout << ai_scene->mRootNode->mName.data; // SEG FAULT
    ...
}

编辑: ai_scene在Mesh结构中:

private:
const aiScene *ai_scene = nullptr;

场景本身是在模型结构中创建的,如下所示:

void init(const std::string &path, const GLuint params) {
    // Create an instance of the Importer class
    Assimp::Importer importer;
    const aiScene *scene = importer.ReadFile(path, params);

    // If the import failed, report it
    if (!scene) {
        std::cout << importer.GetErrorString() << "\n";
        return;
    }

    processNode(scene->mRootNode, scene);
}

processNode代码:

void processNode(const aiNode *node, const aiScene *scene) {
    for (size_t i = 0; i < node->mNumMeshes; i++) {
        aiMesh *mesh = scene->mMeshes[node->mMeshes[i]];
        meshes.push_back(Mesh::processMesh(mesh, scene));       
    }

    for(size_t i = 0; i < node->mNumChildren; i++) {
        processNode(node->mChildren[i], scene);
    }
}

这是什么问题?以及如何解决?

最佳答案

问题已通过扩展 Assimp::Importer importer 的范围解决:

// Create an instance of the Importer class
Assimp::Importer importer;
void init(const std::string &path, const GLuint params) {
    const aiScene *scene = importer.ReadFile(path, params);
    ...
}

关于c++ - 将指针复制到 aiScene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405904/

相关文章:

c++ - C++ 函数中 "return"的确切时刻

C++ 模板 : The static member in a global object is not initialized

定义成员函数的 c++ 语法,它接受 int 并在类外部返回指向 in 的指针

animation - Assimp 动画骨骼变换

c++ - Assimp 泄漏内存

python - 如何防止 Python 返回到 C++ boost::python::error_already_set?

c++ - 将两个空指针 vector (void *) 合并到新的结果 vector 中

c++ - Assimp 计算骨骼

opengl - 使用 Assimp.Net 和 OpenTK 进行换肤

ios - 在 IOS 中使用线程时,assimp 无法导入 3d 模型