Un skybox es una muy buena forma de hacerlo. Querrá usar un cube map para esto. Básicamente, renderizas un cubo alrededor de la cámara y trazas una textura en el interior de cada cara del cubo. Creo que OpenGL puede incluir esto en su pipeline de función fija, pero en caso de que esté tomando el enfoque shader (la función fija está obsoleta), querrá usar samplers de mapas en cubos (samplerCUBE en Cg, no estoy seguro acerca de GLSL). Al dibujar el mapa del cubo, también debe eliminar la traducción de la matriz de la vista modelo, pero mantener la rotación (esto hace que la caja del cielo "siga" la cámara pero le permite mirar alrededor en diferentes partes del cielo).
Lo mejor que se puede hacer es dibujar el mapa del cubo después de dibujar todos los objetos opacos. Esto puede parecer extraño porque de forma predeterminada el cielo bloqueará otros objetos, pero utiliza el siguiente truco (si usa sombreadores) para evitar esto: al escribir la posición de salida final en el sombreado de vértices, en lugar de escribir .xyzw, escriba .xyww . Esto forzará el cielo hacia el plano lejano que hace que esté detrás de todo. ¡La ventaja de esto es que hay absolutamente 0 sobregiros!
Aquí una [muestra de mapa de cubo de jogl] (https://github.com/java-opengl-labs/jogl-samples/blob/master/jogl-samples/src/tests/gl_320/texture/Gl_320_texture_cube.java) – elect