簡體   English   中英

導入.obj時出現Assimp未處理的異常

[英]Assimp Unhandled Exception when importing .obj

在過去的兩周里,我一直在努力使Assimp正常工作,但無濟於事,所以我決定問這是最好的方法。 我遵循了cplusplusguy的有關導入靜態網格物體的教程,並且為了使它正常工作,已經逐詞復制了它。

當我嘗試導入.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);
        }
}

當我添加了調試信息后,“ scene-> mNumMeshes”返回1(由於是一個立方體,因此應該返回1),但是“ node-> mNumMeshes”返回0。

我了解到,當存在空指針時會發生未處理的異常,並且此處的空指針為“ node-> mNumMeshes”,但是為什么它為空? 我該如何解決?

我的錯。 有一個錯字:

void sceneLoader::recursiveProcess(aiNode* node, const aiScene* scene){
    //process
    for(int i = 0; i<node->mNumMeshes;i++){         
        aiMesh* mesh = scene->mMeshes[node->mMeshes[i]];
            processMesh(mesh,scene);
        }
        //recursion
        for(int i = 0; 0<node->mNumChildren;i++){ //IT SHOULD BE AN i INSTEAD OF A ZERO
            recursiveProcess(node->mChildren[i],scene);
        }
}

完成的代碼如下所示:

void sceneLoader::recursiveProcess(aiNode* node, const aiScene* scene){
    //process

    for(unsigned int i = 0; i<node->mNumMeshes;i++){    
        aiMesh* mesh = scene->mMeshes[node->mMeshes[i]];
        processMesh(mesh,scene);
        }
        //recursion
    if(node->mNumChildren > 0){
            for(unsigned int i = 0; i<node->mNumChildren;i++){
                recursiveProcess(node->mChildren[i],scene);
            }
    }
}

抱歉。 不會再發生了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM