# Forum

## Drawing a Sphere (OpenGL ES compatible)

Discuss programming topics that involve the OpenGL API.

Moderator: InsideQC Admins

### Drawing a Sphere (OpenGL ES compatible)

Creates a vertex array with sphere vertex and texture coordinates with glu stuffs.

Code: Select all
`const float degreeIncrement         = 10;      // 10 degrees betweenconst int   sphereVertexCount      = (180 / degreeIncrement) * (360 / degreeIncrement) * 4;fbool isSpherePopulated = False;GLfloat sphereVertex3f   [sphereVertexCount];GLfloat sphereTexCoord2f [sphereVertexCount];// Based on http://www.swiftless.com/tutorials/opengl/sphere.html// Overhauled and streamlined.const float M_PI_Divided_By_180 = M_PI/180;void zCreateSphere (void){   if (isSpherePopulated == False)   {      int vertNum = 0;            for (float z = 0; z <= 180 - degreeIncrement; z += degreeIncrement) // Iterate through height of sphere of Z         for (float c = 0; c <= 360 - degreeIncrement; c += degreeIncrement) // Each point of the circle X, Y of "C"         {            sphereVertex3f   [vertNum] = sinf( (c) * M_PI_Divided_By_180 ) * sinf( (z) * M_PI_Divided_By_180 );                        sphereVertex3f   [vertNum] = cosf( (c) * M_PI_Divided_By_180 ) * sinf( (z) * M_PI_Divided_By_180 );            sphereVertex3f   [vertNum] = cosf( (z) * M_PI_Divided_By_180 );            sphereTexCoord2f [vertNum] = (c)     / 360;            sphereTexCoord2f [vertNum] = (2 * z) / 360;            vertNum ++; // ^ Top Left                        sphereVertex3f    [vertNum] = sinf( (c) * M_PI_Divided_By_180 ) * sinf( (z + degreeIncrement) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (c) * M_PI_Divided_By_180 ) * sinf( (z + degreeIncrement) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (z + degreeIncrement) * M_PI_Divided_By_180 );            sphereTexCoord2f [vertNum] = (c)               / 360;            sphereTexCoord2f [vertNum] = (2 * (z + degreeIncrement)) / 360;            vertNum ++; // ^ Top Right                        sphereVertex3f    [vertNum] = sinf( (c + degreeIncrement) * M_PI_Divided_By_180 ) * sinf( (z) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (c + degreeIncrement) * M_PI_Divided_By_180 ) * sinf( (z) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (z) * M_PI_Divided_By_180 );            sphereTexCoord2f [vertNum] = (c + degreeIncrement) / 360;            sphereTexCoord2f [vertNum] = (2 * z)     / 360;                        vertNum ++; // ^ Bottom Left                        sphereVertex3f    [vertNum] = sinf( (c + degreeIncrement) * M_PI_Divided_By_180 ) * sinf( (z + degreeIncrement) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (c + degreeIncrement) * M_PI_Divided_By_180 ) * sinf( (z + degreeIncrement) * M_PI_Divided_By_180 );            sphereVertex3f    [vertNum] = cosf( (z + degreeIncrement) * M_PI_Divided_By_180 );                        sphereTexCoord2f [vertNum] = (c + degreeIncrement)       / 360;            sphereTexCoord2f [vertNum] = (2 * (z + degreeIncrement)) / 360;                        vertNum ++; // ^ Bottom Right         }            isSpherePopulated = True;   }   }void GL_ModelRenderSphere_TexScale (const int glTextureSlot, const vec3_t repeatcount /*ignore this for now*/){   glDisable (GL_CULL_FACE);       zCreateSphere (); // Makes our sphere if it isn't made      {      glEnable              (GL_TEXTURE_2D);      glBindTexture         (GL_TEXTURE_2D, TexSlot);            // size (Specifies  the  number  of  coordinates per array element), type (GL_FLOAT, etc), stride, pointer      glTexCoordPointer      (2, GL_FLOAT, 0, sphereTexCoord2f);       glEnableClientState      (GL_TEXTURE_COORD_ARRAY);               glVertexPointer         (3, GL_FLOAT, 0, sphereVertex3f);      glEnableClientState      (GL_VERTEX_ARRAY);            glDrawArrays         (GL_TRIANGLE_STRIP, 0, sphereVertexCount);               glDisableClientState   (GL_VERTEX_ARRAY);      glDisableClientState   (GL_TEXTURE_COORD_ARRAY);      }   }`
The night is young. How else can I annoy the world before sunsrise? Inquisitive minds want to know ! And if they don't -- well like that ever has stopped me before .. Baker

Posts: 3666
Joined: Tue Mar 14, 2006 5:15 am

Return to OpenGL Programming

### Who is online

Users browsing this forum: No registered users and 1 guest