OpenGL Assimp C ++ Место чтения нарушения доступа 0x00000000

Я столкнулся с проблемой при попытке запустить простой загрузчик / демонстратор моделей, основанный на некоторых руководствах. Всякий раз, когда я компилирую следующий код, я получаю эту ошибку:

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.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector