我正在尝试使用 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 时显然检测到访问冲突。