This is a very simple question for opengl fans, how do you draw a 3d sphere using open gl? , strips, fans, etc, any option will do. Im interested in also knowing how to draw a hemisphere.

# Drawing a 3d sphere.

Started by Azrael, Aug 03 2001 06:53 AM

2 replies to this topic

###
#2
Members - Reputation: **122**

Posted 03 August 2001 - 07:19 AM

you could use any of those really, depending on how you make the sphere

you can make the sphere itsself many ways

or you could do it the easy way and look at HELP and see

void gluSphere(

GLUquadricObj *qobj,

GLdouble radius,

GLint slices,

GLint stacks

);

that would work, but makes a sphere that doesn''t have a very even distribution of polygons

a better way for some things is to have 12 evenly distributed points on a sphere, that you could subdivide later if you want more

a top point (up)

along with 5 point around the top (at increments of 1/5 of 2PI and height of .5)

and 5 more around the botom (the same as above but rotated 1/10 of 2 PI and height of -.5)

and a bottom point (down)

it might be more clear like this

(i is just a struct that i used to hold all the stuff for the sphere, its not special)

i->radius = r;

i->point[0].start = VECTOR(0.0f, r, 0.0f);

i->point[11].start = VECTOR(0.0f, -r, 0.0f);

int n;

for (n = 0; n < 5; n++)

{

float a = PIx2*(n*.2f);

float b = PI*(1.0f/3.0f);

float c = PI-PI*(1.0f/3.0f);

i->point[1+n].start = VECTOR(cos(a)*sin(-b), cos(b), sin(a)*sin(-b)) * r;

a += PIx2*(.1f);

i->point[6+n].start = VECTOR(cos(a)*sin(-c), cos©, sin(a)*sin(-c)) * r;

}

now if you are not thinking this is too long, you could also make a sphere where the distribution isn''t uniform at all, like a point cloud or something...

you can make the sphere itsself many ways

or you could do it the easy way and look at HELP and see

void gluSphere(

GLUquadricObj *qobj,

GLdouble radius,

GLint slices,

GLint stacks

);

that would work, but makes a sphere that doesn''t have a very even distribution of polygons

a better way for some things is to have 12 evenly distributed points on a sphere, that you could subdivide later if you want more

a top point (up)

along with 5 point around the top (at increments of 1/5 of 2PI and height of .5)

and 5 more around the botom (the same as above but rotated 1/10 of 2 PI and height of -.5)

and a bottom point (down)

it might be more clear like this

(i is just a struct that i used to hold all the stuff for the sphere, its not special)

i->radius = r;

i->point[0].start = VECTOR(0.0f, r, 0.0f);

i->point[11].start = VECTOR(0.0f, -r, 0.0f);

int n;

for (n = 0; n < 5; n++)

{

float a = PIx2*(n*.2f);

float b = PI*(1.0f/3.0f);

float c = PI-PI*(1.0f/3.0f);

i->point[1+n].start = VECTOR(cos(a)*sin(-b), cos(b), sin(a)*sin(-b)) * r;

a += PIx2*(.1f);

i->point[6+n].start = VECTOR(cos(a)*sin(-c), cos©, sin(a)*sin(-c)) * r;

}

now if you are not thinking this is too long, you could also make a sphere where the distribution isn''t uniform at all, like a point cloud or something...

###
#3
Moderators - Reputation: **1323**

Posted 03 August 2001 - 03:43 PM

Hey hey, why not use the OGL Quadric objects? They are decently fast, and damn easy to use! If you are interested, NeHe has a couple of tuts on it... Go check it out (http://nehe.gamedev.net)

------------------------------

Trent (ShiningKnight)

E-mail me

OpenGL Game Programming Tutorials

------------------------------

Trent (ShiningKnight)

E-mail me

OpenGL Game Programming Tutorials