Hello,
Hopefully this is a simple question; I have the following code that I am using to generate a sphere object for OpenGL. The problem is, as the picture will show, is that there are “holes” in the spheres. I placed a few boxes in the scene to show that overall my buffers/shaders seem to be OK and I believe the problem may be the indices.
Anyway, here is the picture:
And here is how I am generating the sphere:
[code=auto:0]float ShapeRadius = 3.0f;
GLuint NumberOfRings = 50;
GLuint NumberOfSectors = 50;
float const R = 1. / (GLfloat)(NumberOfRings - 1);
float const S = 1. / (GLfloat)(NumberOfSectors - 1);
int r, s;
Temp_Vertices = new std::vector<GLfloat>;
Temp_Normals = new std::vector<GLfloat>;
Temp_TextCoords = new std::vector<GLfloat>;
Temp_Indices = new std::vector<GLuint>;
Temp_Vertices->resize(NumberOfRings * NumberOfSectors * 3);
Temp_Normals->resize(NumberOfRings * NumberOfSectors * 3);
Temp_TextCoords->resize(NumberOfRings * NumberOfSectors * 2);
std::vector<GLfloat>::iterator v = Temp_Vertices->begin();
std::vector<GLfloat>::iterator n = Temp_Normals->begin();
std::vector<GLfloat>::iterator t = Temp_TextCoords->begin();
for (r = 0; r < NumberOfRings; r++) for (s = 0; s < NumberOfSectors; s++) {
float const y = sin(-M_PI_2 + M_PI * r * R);
float const x = cos(2 * M_PI * s * S) * sin(M_PI * r * R);
float const z = sin(2 * M_PI * s * S) * sin(M_PI * r * R);
*t++ = s*S;
*t++ = r*R;
*v++ = x * ShapeRadius;
*v++ = y * ShapeRadius;
*v++ = z * ShapeRadius;
*n++ = x;
*n++ = y;
*n++ = z;
}
Temp_Indices->resize(NumberOfRings * NumberOfSectors * 4);
std::vector<GLuint>::iterator i = Temp_Indices->begin();
for (r = 0; r < NumberOfRings; r++) for (s = 0; s < NumberOfSectors; s++) {
*i++ = r * NumberOfSectors + s;
*i++ = r * NumberOfSectors + (s + 1);
*i++ = (r + 1) * NumberOfSectors + (s + 1);
*i++ = (r + 1) * NumberOfSectors + s;
}
Vertices = Temp_Vertices->data();
NumOfVertices = Temp_Vertices->size();
Indices = Temp_Indices->data();
NumOfIndices = Temp_Indices->size();
Normals = Temp_Normals->data();
NumOfNormals = Temp_Normals->size();
TextureCoordinates = Temp_TextCoords->data();
NumOfTextureCoordinates = Temp_TextCoords->size();
What can I do to get rid of the holes?
Thank you.