首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制指向aiScene的指针

复制指向aiScene的指针
EN

Stack Overflow用户
提问于 2019-03-28 19:56:09
回答 1查看 296关注 0票数 1

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

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

    ...
}

但是如果你在网格内部这样做,它会导致一个错误。例如:

代码语言:javascript
复制
void boneTransform(float TimeInSeconds) {
    glm::mat4 identity = glm::mat4();
    std::cout << ai_scene->mRootNode->mName.data; // SEG FAULT
    ...
}

编辑: ai_scene在网格结构中:

代码语言:javascript
复制
private:
const aiScene *ai_scene = nullptr;

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

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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);
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 11:48:42

通过扩大Assimp::Importer importer的范围,解决了问题。

代码语言:javascript
复制
// 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);
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55405904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档