0

私は過去 2 週間、Assimp を正しく動作させようとしてきましたが、うまくいきませんでした。スタティック メッシュのインポートに関する thecplusplusguy のチュートリアルに従い、それを機能させるために単語ごとにコピーしました。

.obj (問題がある場合はキューブ) をインポートしようとすると、「OpenGL.exe の 0x00EF061B で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0xABABAFFB」が発生し、プログラムが停止し、オンラインであることが通知されます。私のコードの 30 ( "for(int i=0; imNumMeshes; i++)" )。

#include "sceneloader.h"

sceneLoader::sceneLoader(){
    std::cout<<"New scene created."<<std::endl;
}

sceneLoader::sceneLoader(const char* filename){
    std::cout<<"Scene loading hath begun."<<std::endl;
    Assimp::Importer importer;
    const aiScene* scene = importer.ReadFile(filename,aiProcess_GenSmoothNormals | aiProcess_Triangulate |
        aiProcess_CalcTangentSpace | aiProcess_FlipUVs |
        aiProcess_JoinIdenticalVertices);

    if(scene->mFlags == AI_SCENE_FLAGS_INCOMPLETE){
        std::cout<<"MFLAGS - Scene '"<<filename<<"' could not be loaded."<<std::endl;
        return;
    }
    if(!scene->mRootNode){
        std::cout<<"MROOTNODE - Scene '"<<filename<<"' could not be loaded."<<std::endl;
        return;
    }
    std::cout<<"Recursive processing about to begin."<<std::endl;

    recursiveProcess(scene->mRootNode,scene);
    std::cout<<"Recursive processing finished."<<std::endl;
}

void sceneLoader::recursiveProcess(aiNode* node, const aiScene* scene){
    //process
    for(int i = 0; i<node->mNumMeshes;i++){         //HERE IS THE PROBLEM
        aiMesh* mesh = scene->mMeshes[node->mMeshes[i]];
            processMesh(mesh,scene);
        }
        //recursion
        for(int i = 0; 0<node->mNumChildren;i++){
            recursiveProcess(node->mChildren[i],scene);
        }
}

デバッグするために couts を追加すると、"scene->mNumMeshes" は 1 を返します (これは 1 つのキューブなので、そうあるべきです) が、"node->mNumMeshes" は 0 を返します。

ヌルポインタがあるとハンドルされない例外が発生すること、ここでのヌルポインタが「node->mNumMeshes」であることは理解していますが、なぜヌルなのですか? そして、どうすればこれを修正できますか?

4

1 に答える 1