J'essaie de dessiner un cylindre en utilisant les VBO et je suis bloqué avec cette violation d'accès. Voici le code (formaté pour l'exemple):Exception non gérée/Accédez à l'emplacement de lecture de violation en essayant de dessiner un cylindre en utilisant VBO
int N;
float *vertexArray, normalArray;
void fillArrays(float height, float radius, int num) {
N = num;
vertexArray = (float*) malloc(sizeof(float)*36*num);
normalArray = (float*) malloc(sizeof(float)*36*num);
...
}
La fonction ci-dessus ne fait que remplir les tableaux avec les vecteurs et les sommets normaux.
void drawCylinder() {
GLuint buffers[2];
glGenBuffers(2, buffers);
glBindBuffer(GL_ARRAY_BUFFER, buffers[0]);
glBufferData(GL_ARRAY_BUFFER, 144*N, vertexArray, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER,buffers[1]);
glBufferData(GL_ARRAY_BUFFER, 144*N, normalArray, GL_STATIC_DRAW);
glVertexPointer(3,GL_FLOAT,0,vertexArray);
glNormalPointer(GL_FLOAT,0,normalArray);
glDrawArrays(GL_TRIANGLES, 0, 12*N);
}
L'exception est levée dans l'appel glDrawArrays. J'appelle drawCylinder() dans la fonction de rappel d'affichage de GLUT (renderfunc). La fonction principale ressemble à ceci:
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("Glew - VBOs - Cylinder");
glutDisplayFunc(renderfunc);
glutIdleFunc(renderfunc);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
fillArrays(3,1,20);
glutMainLoop();
}
Il y a probablement plusieurs problèmes avec mon code, je viens juste de commencer à jouer avec VBOs (et avec les libs openGL pour cette question). Mais y a-t-il une raison évidente à cette exception? J'utilise Visual Studio, et comme je l'ai dit, la violation d'accès est apparemment détectée lors de l'appel de glDrawArrays.
Merci, je l'ai maintenant. Ce tutoriel était vraiment utile! –