0

我在尝试根据一些教程运行简单的模型加载器/显示器时遇到了问题。每当我编译以下代码时,都会收到此错误:

Unhandled exception at 0x77ad15de in Test.exe: 0xC0000005: Access violation reading location 0x00000000.

我知道这意味着正在访问一个非法的空指针,但我似乎找不到。这是我的代码:

gleMesh gleLoadMesh(const char* filename){
const aiScene* scene = aiImportFile(filename, aiProcessPreset_TargetRealtime_Fast);

if(!scene){
    fprintf(stderr,"[WARNING] Could not load file %s", filename);
    gleMesh load = {0,0,0,0};
    return load;
}

const struct aiMesh* mesh = scene->mMeshes[0];

int tris = mesh->mNumFaces*3;
float *verts = new float[mesh->mNumFaces*3*3];
float *normals = new float[mesh->mNumFaces*3*3];
float *uvs = new float[mesh->mNumFaces*3*3];

for(unsigned int i = 0; i < mesh->mNumFaces; i++){
    const aiFace face = mesh->mFaces[i];

    for(unsigned int j = 0; j < 3; j++){
        aiVector3D vert = mesh->mVertices[face.mIndices[j]];
        memcpy(verts, &vert, sizeof(float)*3);
        verts += 3;

        aiVector3D normal = mesh->mNormals[face.mIndices[j]];
        memcpy(normals, &normal, sizeof(float)*3);
        normals += 3;

        aiVector3D uv = mesh->mTextureCoords[0][face.mIndices[j]];
        memcpy(uvs, &uv, sizeof(float)*2);
        uvs += 2;
    }
}

gleMesh load = {0,0,0,0};

if(glv3){
    glGenBuffers(1, &load.vertex);
    glBindBuffer(GL_ARRAY_BUFFER, load.vertex);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verts), verts, GL_STATIC_DRAW);

    glGenBuffers(1, &load.normal);
    glBindBuffer(GL_ARRAY_BUFFER, load.normal);
    glBufferData(GL_ARRAY_BUFFER, sizeof(uvs), uvs, GL_STATIC_DRAW);

    glGenBuffers(1, &load.uv);
    glBindBuffer(GL_ARRAY_BUFFER, load.uv);
    glBufferData(GL_ARRAY_BUFFER, sizeof(uvs), uvs, GL_STATIC_DRAW);

    load.numTris = tris;
}
else{
    load.vertex = glGenLists(1);
    glNewList(load.vertex, GL_COMPILE);
    int j = 0;
    for(unsigned int i = 0; i < mesh->mNumFaces; i++){
            glNormal3f(normals[j], normals[j+1], normals[j+2]);
            glVertex3f(verts[j], verts[j+1], verts[j+2]);
            j+=3;
    }
    glEndList();
}

verts -= mesh->mNumFaces*3*3;
normals -= mesh->mNumFaces*3*3;
uvs -= mesh->mNumFaces*3*2;
aiReleaseImport(scene);

return load;

}

我在这里使用这个功能:

int main(){
    gleInit("Test", GLFW_WINDOW, SCREEN_WIDTH, SCREEN_HEIGHT);

    mesh1 = gleLoadMesh("resource/model/test.blend");

    while(!glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED)){
        draw();
        capFPS();
    }

    gleQuit();
    return 0;
}

最奇怪的是,根据我选择加载的模型格式,我会在不同的地方得到一个错误中断,但错误总是一样的。我正在使用 assimp 3.0 版和 Visual Studio 2010。

4

0 回答 0