Drawing a Sphere around the "Camera"

Started by
3 comments, last by Caglow 15 years, 1 month ago
First of all, I'm new here (and to OpenGL/GLUT for that matter) so if there's something that seems extremely obvious, sorry. Anyways, I'm trying to draw a sphere with the center lying on the camera. I've managed to draw the sphere for now...and need something to move the camera into the middle. I'm quite sure a sphere is hollow. If it isn't, then I need to get it to be. This is for a planetarium program which I'm converting from GDI+ to OpenGL.
Advertisement
Where is it if it's not in the center of the world? Check the part where you call glMatrixMode(GL_MODELVIEW);

Every matrix transformation done after that modify the position of the object. You can either have some combined basic transformations (glRotatef, glTranslatef) or use gluLookAt which is acting as a "camera".

If you want to draw your sphere right at the middle of the camera, just don't do any transformation at all. Right after you set the GL_MODELVIEW matrix mode, call glLoadIdentity() and remove every other transformation you can find. Then draw your sphere, and it should appear at world pos (0,0,0), in your face.

Of course, your sphere model is probably made so the normals point from the exterior faces, so if you want to see the inside you will have to change the culling mode with glCullFace().
Yes it's hollow, as with everything it's made up from infinitely thin polygons.
It's also pretty simple to do, just call glLoadIdentity(); to reset the matrix.
This will render the sphere at coordinates 0,0,0, then to make it visible you have to make sure the spheres radius is larger than the nearplane and smaller than the farplane, then you need to call glFrontFace(GL_CW); to view the backside of the polygons (you have to reset that state later with GL_CCW).
If you just set the MODELVIEW matrix to identity you'll get the "inside" of the sphere drawn as has been said already, but you won't be able to rotate the view to look around the sphere. I'd imagine that would completely defeat the purpose ;)

Try the following instead:

- Push Matrix
- Load Identity
- Apply the view matrix
- Translate to the camera's position
- Render Sphere (inside out)
- Pop matrix

So, what you're doing is building up a MODELVIEW matrix with the translated exactly over the camera, and rendering that. This way, if you rotate the camera, you'll around inside of the sphere.

If you know the camera's rotation then you can replace the 3rd and 4th steps with a glRotate, and you'll have the same effect.

It works! Thanks for the help!

This topic is closed to new replies.

Advertisement