OpenGL Assimp C++, местоположение чтения нарушения прав доступа 0x00000000 ⇐ C++
OpenGL Assimp C++, местоположение чтения нарушения прав доступа 0x00000000
Я столкнулся с проблемой при попытке запустить простой загрузчик/отображение модели на основе некоторых руководств. Всякий раз, когда я компилирую следующий код, я получаю эту ошибку:
Необработанное исключение по адресу 0x77ad15de в Test.exe: 0xC0000005: местоположение чтения нарушения прав доступа 0x00000000. Я знаю, что это означает, что осуществляется доступ к нулевому указателю, что является незаконным, но я не могу его найти. Вот мой код:
gleMesh gleLoadMesh(const char* имя файла){ const aiScene* Scene = aiImportFile(filename, aiProcessPreset_TargetRealtime_Fast); если(!сцена){ fprintf(stderr,"[ПРЕДУПРЕЖДЕНИЕ] Не удалось загрузить файл %s", filename); gleMesh load = {0,0,0,0}; возвратная нагрузка; } const struct aiMesh* сетка = сцена->mMeshes[0]; int tris = сетка->mNumFaces*3; float *verts = новый float[mesh->mNumFaces*3*3]; float *normals = новый float[mesh->mNumFaces*3*3]; float *uvs = новый float[mesh->mNumFaces*3*3]; for(unsigned int i = 0; i mNumFaces; i++){ const aiFace face = сетка->mFaces; for(unsigned int j = 0; j mVertices[face.mIndices[j]]; memcpy(verts, &vert, sizeof(float)*3); верты += 3; aiVector3D нормальный = сетка->mNormals[face.mIndices[j]]; memcpy(normals, &normal, sizeof(float)*3); нормали += 3; aiVector3D uv = сетка->mTextureCoords[0][face.mIndices[j]]; memcpy(uvs, &uv, sizeof(float)*2); увс += 2; } } gleMesh load = {0,0,0,0}; если(глв3){ 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 = трис; } еще{ load.vertex = glGenLists(1); glNewList(load.vertex, GL_COMPILE); интервал j = 0; for(unsigned int i = 0; i mNumFaces; i++){ glNormal3f(нормали[j], нормали[j+1], нормали[j+2]); glVertex3f(verts[j], verts[j+1], verts[j+2]); j+=3; } глКонецСписка(); } verts -= сетка->mNumFaces*3*3; нормали -= сетка->mNumFaces*3*3; uvs -= сетка->mNumFaces*3*2; aiReleaseImport (сцена); возвратная нагрузка; } Здесь я использую эту функцию:
int main(){ gleInit("Тест", GLFW_WINDOW, SCREEN_WIDTH, SCREEN_HEIGHT); mesh1 = gleLoadMesh("resource/model/test.blend"); while(!glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED)){ рисовать(); кэпФПС(); } gleQuit(); вернуть 0; } Самое странное то, что в зависимости от того, какой формат модели я выбираю для загрузки, я получаю сообщение об ошибке в другом месте, но ошибка всегда одна и та же. Я использую assimp версии 3.0 и Visual Studio 2010.
Я столкнулся с проблемой при попытке запустить простой загрузчик/отображение модели на основе некоторых руководств. Всякий раз, когда я компилирую следующий код, я получаю эту ошибку:
Необработанное исключение по адресу 0x77ad15de в Test.exe: 0xC0000005: местоположение чтения нарушения прав доступа 0x00000000. Я знаю, что это означает, что осуществляется доступ к нулевому указателю, что является незаконным, но я не могу его найти. Вот мой код:
gleMesh gleLoadMesh(const char* имя файла){ const aiScene* Scene = aiImportFile(filename, aiProcessPreset_TargetRealtime_Fast); если(!сцена){ fprintf(stderr,"[ПРЕДУПРЕЖДЕНИЕ] Не удалось загрузить файл %s", filename); gleMesh load = {0,0,0,0}; возвратная нагрузка; } const struct aiMesh* сетка = сцена->mMeshes[0]; int tris = сетка->mNumFaces*3; float *verts = новый float[mesh->mNumFaces*3*3]; float *normals = новый float[mesh->mNumFaces*3*3]; float *uvs = новый float[mesh->mNumFaces*3*3]; for(unsigned int i = 0; i mNumFaces; i++){ const aiFace face = сетка->mFaces; for(unsigned int j = 0; j mVertices[face.mIndices[j]]; memcpy(verts, &vert, sizeof(float)*3); верты += 3; aiVector3D нормальный = сетка->mNormals[face.mIndices[j]]; memcpy(normals, &normal, sizeof(float)*3); нормали += 3; aiVector3D uv = сетка->mTextureCoords[0][face.mIndices[j]]; memcpy(uvs, &uv, sizeof(float)*2); увс += 2; } } gleMesh load = {0,0,0,0}; если(глв3){ 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 = трис; } еще{ load.vertex = glGenLists(1); glNewList(load.vertex, GL_COMPILE); интервал j = 0; for(unsigned int i = 0; i mNumFaces; i++){ glNormal3f(нормали[j], нормали[j+1], нормали[j+2]); glVertex3f(verts[j], verts[j+1], verts[j+2]); j+=3; } глКонецСписка(); } verts -= сетка->mNumFaces*3*3; нормали -= сетка->mNumFaces*3*3; uvs -= сетка->mNumFaces*3*2; aiReleaseImport (сцена); возвратная нагрузка; } Здесь я использую эту функцию:
int main(){ gleInit("Тест", GLFW_WINDOW, SCREEN_WIDTH, SCREEN_HEIGHT); mesh1 = gleLoadMesh("resource/model/test.blend"); while(!glfwGetKey(GLFW_KEY_ESC) && glfwGetWindowParam(GLFW_OPENED)){ рисовать(); кэпФПС(); } gleQuit(); вернуть 0; } Самое странное то, что в зависимости от того, какой формат модели я выбираю для загрузки, я получаю сообщение об ошибке в другом месте, но ошибка всегда одна и та же. Я использую assimp версии 3.0 и Visual Studio 2010.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение