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);
...
}
上記の関数は、配列を法線ベクトルと頂点で埋めるだけです。
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);
}
glDrawArrays 呼び出しで例外がスローされます。GLUT のディスプレイ コールバック関数 (renderfunc) で drawCylinder() を呼び出しています。メイン関数は次のようになります。
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();
}
私のコードにはおそらくさまざまな問題があります.VBO(およびopenGLライブラリ)をいじり始めたところです。しかし、この例外がスローされる明確な理由はありますか? 私はVisual Studioを使っていますが、先ほども言ったようにglDrawArraysを呼び出すとアクセス違反が検出されるようです。