私は過去 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」であることは理解していますが、なぜヌルなのですか? そして、どうすればこれを修正できますか?