Yet another OpenGL.org FAQ that I finally decided to answer
with some sample code on the web.
To start the demo, run the "skybox.exe" program from the
command line, inside this directory. Pass the "-w" option
if you want to run it in a window. Use arrow keys to scroll,
and escape (or 'q') to quit.
This program shows how to draw a sky box with no seaming
in the textures, using GL_CLAMP_TO_EDGE. The textures are
generated with just over 90 degree field of view (I'm using
the Persistence of Vision ray tracer) and drawn on a cube
that's centered around the camera. You can use Bryce, or
3ds Max, or whatever you want to generate these textures,
as long as you can set up a camera that generates a square
texture that's a hairs-edge wider than 90 degrees FOV (to
compensate for the fact that we clamp to the center of
the outermost pixels).
If your graphics card supports border texels (which the
GeForce 2 does not) you can load the neighboring texture
edges into the borders of each texture, and get away with
an exact 90 degree FOV when rendering the textures, and also
use CLAMP or CLAMP_TO_BORDER to get rid of the final (very
small) artifact.
Please pay no attention to the gross over-engineering of the
GL state wrapping that happens in this sample; it's cut down
from another test program I had going at the time. All the
good stuff happens in main.cpp, and the Skybox class is at
the head of the file to make it easy to find. Put a break-
point in Skybox::draw() and trace through what it's doing,
and you should be going in no time.
This code builds on Windows XP using MSVC version 7; you may
be able to get it to build on Linux or other platforms with
relative ease, because it's using GLUT (DLL for Windows is
included) but I haven't done so, so it probably won't compile
out of the box.
|