Trying to make a sphere. But it so doesn’t look like 3D, in fact it looks like a flat 2D picture. What am I missing here?

Thankyou
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);
// normals
glNormal3f(x * zr0, y * zr0, z0);
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
// normals
glNormal3f(x * zr1, y * zr1, z1);
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
// Render code
Furthermore, I am rotating this circle, the rotation works fine, since I have light changing and it gives me an idea that, it is rotating and is infact a circle at least
glRotatef(Angle, 1.0f, 0.5f, 0.3f);
glBindBuffer(GL_ARRAY_BUFFER, VertexBufferObject[2]);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 7*4, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3200);
glBindBuffer(GL_ARRAY_BUFFER, 0);
First off all you need to check if lighting is currently enabled using
glGetIntegerv(GL_LIGHTING,&i)and maybe turn it onglEnable(GL_LIGHTING).Then setup the
glMaterial(...),glLightModel(...),glLight(...), there is tutorial http://www.cse.msu.edu/~cse872/tutorial3.htmlor you can use own GLSL shaders to apply some advanced illumination, some tutorials are here http://www.lighthouse3d.com/opengl/glsl/
In some trivial cases you can just pass vertex colors via glColor3f(…) instead of using the GL lighting.
Also normals should be unit vectors or enable normalization
glEnable(GL_NORMALIZE).