Spheres

I was wondering if there was an easy way to display spheres in openGL.

IE, for triangles we just go
glBegin(GL_TRIANGLES)

is there a way to do this with spheres?

You could use GLUT to draw a sphere but basically with OpenGL you have to draw a sphere using a bunch of triangles. That’s what GLUT does. With enough triangles you stop noticing the triangles and only see the sphere. Smooth shading helps a lot with this.

Do you have any example code somewhere I can see?

Thanks for the help.

google “gluSphere”

…or if you prefer here’s some code that will generate the points for a sphere rendered as a QUAD_STRIP

 
int i,j;
	double dRho1 = 0;
	double dRho2 = 0;
	double dPhi = -PI/2.;
	Vert3D e,p;
	double SpherePoints[iNUM_GLOBE_PTS+1][iNUM_GLOBE_PTS/2][6];
	double TexPoints[iNUM_GLOBE_PTS+1][iNUM_GLOBE_PTS/2][4];

	double dTexCoordX,dTexCoordY;
	dTexCoordX = m_pPrimitive->m_dTexCoordX;
	dTexCoordY = m_pPrimitive->m_dTexCoordY;
	for (j=0;j<iNUM_GLOBE_PTS/2;j++) 
	{
		dRho2 += PI / ((double)iNUM_GLOBE_PTS/2);
		for (i=0;i<=iNUM_GLOBE_PTS;i++) 
		{
			//e is the surface normal (in case you need it).
			e.x = sin(dRho2)*cos(dPhi);
			e.y = cos(dRho2);
			e.z = sin(dRho2)*sin(dPhi);
			
			p.x = dRadius * e.x;
			p.y = dRadius * e.y;
			p.z = dRadius * e.z;
			
			
			TexPoints[i][j][0] = dTexCoordX*(i/(double)iNUM_GLOBE_PTS);
			TexPoints[i][j][1] = dTexCoordY*(2*(j+1)/(double)iNUM_GLOBE_PTS);
			
			//Lower Ring....
			
			SpherePoints[i][j][0]		= p.x;
			SpherePoints[i][j][1]		= p.y;
			SpherePoints[i][j][2]		= p.z;
			
			e.x = sin(dRho1)*cos(dPhi);
			e.y = cos(dRho1);
			e.z = sin(dRho1)*sin(dPhi);
			
			p.x = dRadius * e.x;
			p.y = dRadius * e.y;
			p.z = dRadius * e.z;
			
			TexPoints[i][j][2] = dTexCoordX*(i/(double)iNUM_GLOBE_PTS);
			TexPoints[i][j][3] = dTexCoordY*(2*j/(double)iNUM_GLOBE_PTS);
			
			//Upper Ring
			SpherePoints[i][j][3]		= p.x;
			SpherePoints[i][j][4]		= p.y;
			SpherePoints[i][j][5]		= p.z;
			
			dPhi -= 2*PI/(double)iNUM_GLOBE_PTS;
		}
		pGL->End();
		dPhi = -PI/2.;
		dRho1 += PI / ((double)iNUM_GLOBE_PTS/2);
	}
 

use quadratics.

  
GLUquadricObj *quadratic;

// on your initialization function:
quadratic = gluNewQuadric();
gluQuadricNormals(quadratic,GLU_SMOOTH);
gluQuadricTexture(quadratic,GL_TRUE); 

//on your rendering function:
gluSphere(quadratic,radius,subdivisions,subdivisions);

//on your deinitialization function:
gluDeleteQuadric(quadratic);

yes, use quadratic with GLU