# Creating a 3D Solid Sphere in OpenGL

• 10-30-2012
in_ship
Creating a 3D Solid Sphere in OpenGL
Hi guys! :D

I'm working on a new OpenGL problem today: Creating a 3D Solid Sphere in OpenGL.

I've used the following code to define a class '3DSphere.cpp' (according to Link).

Code:

```/*  * 3DSphere.cpp  *  *  Created on: Oct 30, 2012  *      Author: guptaa  */ #include <stdio.h> #include <stdlib.h> #include <gl.h> #include <glu.h> #include <glut.h> #include <math.h> #include <vector.h> class 3DSphere { protected:     vector<GLfloat> vertices;     vector<GLfloat> normals;     vector<GLfloat> texcoords;     vector<GLushort> indices; public:     void SolidSphere(float radius, unsigned int rings, unsigned int sectors)     {         float const R = 1./(float)(rings-1);         float const S = 1./(float)(sectors-1);         int r, s;         sphere_vertices.resize(rings * sectors * 3);         sphere_normals.resize(rings * sectors * 3);         sphere_texcoords.resize(rings * sectors * 2);         vector<GLfloat>::iterator v = sphere_vertices.begin();         vector<GLfloat>::iterator n = sphere_normals.begin();         vector<GLfloat>::iterator t = sphere_texcoords.begin();         for(r = 0; r < rings; r++) for(s = 0; s < sectors; 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 * radius;                 *v++ = y * radius;                 *v++ = z * radius;                 *n++ = x;                 *n++ = y;                 *n++ = z;         }         sphere_indices.resize(rings * sectors * 4);         std:vector<GLushort>::iterator i = sphere_indices.begin();         for(r = 0; r < rings; r++) for(s = 0; s < sectors; s++) {                 *i++ = r * sectors + s;                 *i++ = r * sectors + (s+1);                 *i++ = (r+1) * sectors + (s+1);                 *i++ = (r+1) * sectors + s;         }     }     void draw(GLfloat x, GLfloat y, GLfloat z)     {         glMatrixMode(GL_MODELVIEW);         glPushMatrix();         glTranslatef(x,y,z);         glEnableClientState(GL_VERTEX_ARRAY);         glEnableClientState(GL_NORMAL_ARRAY);         glEnableClientState(GL_TEXTURE_COORD_ARRAY);         glVertexPointer(3, GL_FLOAT, 0, &sphere_vertices[0]);         glNormalPointer(GL_FLOAT, 0, &sphere_normals[0]);         glTexCoordPointer(2, GL_FLOAT, 0, &sphere_texcoords[0]);         glDrawElements(GL_QUADS, sphere_indices.size()/4, GL_UNSIGNED_SHORT, sphere_indices);         glPopMatrix();     } }```

However, I receive the following error (ref: line 21 - opening of 3DSphere class):
Quote:

invalid suffix "DSphere" on integer constant
It seems a C error rather than an OpenGL one.

Also - where does the actual drawing take place? There is no main function here!
• 10-30-2012
christop
First, this is C++ code, so this post should be moved to the C++ board.

Second, you cannot start an identifier with a digit. Only A-Za-z_ (and I think \$) are allowed for the first character of an identifier.
• 10-30-2012
in_ship
Quote:

Originally Posted by christop
First, this is C++ code, so this post should be moved to the C++ board.

Second, you cannot start an identifier with a digit. Only A-Za-z_ (and I think \$) are allowed for the first character of an identifier.

Thanks for letting me know. I hope someone can shift this thread into another section.

I changed the name to just 'Sphere.cpp'. And now the rest of the error have started appearing:

Code:

```expected identifier before numeric constant    Sphere.cpp    /CreateSyntheticObjects    line 21    C/C++ Problem expected unqualified-id before numeric constant    Sphere.cpp    /CreateSyntheticObjects    line 21    C/C++ Problem Invalid arguments ' Candidates are: void glDrawElements(unsigned int, int, unsigned int, const void *) invalid suffix "DSphere" on integer constant    Sphere.cpp    /CreateSyntheticObjects    line 21    C/C++ Problem Method 'begin' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 40    Semantic Error Method 'resize' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 37    Semantic Error Method 'size' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 83    Semantic Error Symbol 'sphere_indices' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 60    Semantic Error Symbol 'sphere_normals' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 38    Semantic Error Symbol 'sphere_texcoords' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 39    Semantic Error Symbol 'sphere_vertices' could not be resolved    Sphere.cpp    /CreateSyntheticObjects    line 37    Semantic Error```
• 10-30-2012
laserlight
Moved to C++ programming forum.