OpenGL VBOs: Drawing a sphere
c++, geometry, opengl, vbo
Solution
glBufferData(GL_VERTEX_ARRAY,sphereSize, &ballVerts, GL_STATIC_DRAW);
`ballVerts` is not an array. It is a `std::vector`. Taking the address of a `std::vector` doesn't get the address of the array contained within the `vector`. You need to use `&ballVerts[0]`;
Problem
I'm having some trouble drawing out a sphere. ``` std::vector<GLfloat> ballVerts; for(int i = 0; i <= 40; i++) { double lat0 = M_PI * (-0.5 + (double) (i - 1) / 40); double z0 = sin(lat0); double zr0 = cos(lat0); double lat1 = M_PI * (-0.5 + (double) i / 40); double z1 = sin(lat1); double zr1 = cos(lat1); for(int j = 0; j <= 40; j++) { double lng = 2 * M_PI * (double) (j - 1) / 40; double x = cos(lng); double y = sin(lng); ballVerts.push_back(x * zr0); //X ballVerts.push_back(y * zr0); //Y ballVerts.push_back(z0); //Z ballVerts.push_back(0.0f); ballVerts.push_back(1.0f); ballVerts.push_back(0.0f); ballVerts.push_back(1.0f); //R,G,B,A ballVerts.push_back(x * zr1); //X ballVerts.push_back(y * zr1); //Y ballVerts.push_back(z1); //Z ballVerts.push_back(0.0f); ballVerts.push_back(1.0f); ballVerts.push_back(0.0f); ballVerts.push_back(1.0f); //R,G,B,A } } glGenBuffers(1, &ballVbo); glBindBuffer(GL_VERTEX_ARRAY, ballVbo); GLuint sphereSize = 3200*7*4; //3200 vertixes * 7 floats glBufferData(GL_VERTEX_ARRAY,sphereSize, &ballVerts, GL_STATIC_DRAW); /* Draw a ball */ glBindBuffer(GL_VERTEX_ARRAY, ballVbo); glEnableClientState(GL_VERTEX_ARRAY); glVertexPointer(3, GL_FLOAT, 7*4, 0); glEnableClientState(GL_COLOR_ARRAY); glColorPointer(4, GL_FLOAT, 7*4, (void*)(3*4)); glDrawArrays(GL_TRIANGLE_STRIP, 0, 3200); glBindBuffer(GL_ARRAY_BUFFER, 0); ``` The code for generating the sphere works fine in immediate mode, but when I put it in a VBO I keep getting an access violation exception from glDrawArrays. Any suggestions?