FrameGL was an old student project we worked on in 2005 as we were learning both the basics of C++ (comming from a Java background) and more importantly the OpenGL 2.1 API. This project is a tech demo for basic rendering techniques with OpenGL and is also an introduction into basic computer graphics.
At that time, high-level shading languages were just comming into focus, with unified shaders still a few years off. Although the rendering in this project focused only on the fixed function pipeline, almost all rendering was done with vertex buffer objects and not with immediate mode calls. This was quite new for that time and being mindfull of host to device data transfers is always good practice.
In the following we will go over the functionality of this porject in the order in which it was implemented:
Starting scene. Here a parametric model was used to generate the geometry of the spheres. Only the walls use immediate mode calls for rendering.
Simple phong shading is used.
With some simple geometry tricks and stencil buffering, the left wall bekomes a giant mirror. note that the lightsources are also reflected (highlights on spheres).
Shadow mapping was used here as supported by the fixed function pipeline of Opengl. Note that the jagged lines at the shadow boundary. These are caused by the relative low resolution of the shadow map.
Here textures are mapped to the objects and walls in the scenes. Boath the floor and the ceiling are procedurally generated (chessboard and voronoi respectively).
The atmosphere of the center planet is a large sprite. It's distance is automatically adjustd depending on the camera distance from the center, to emulate the effect of the atmospheric halo
Simple cube mapping is used to add the reflective effect on the middle object. We displace the center of the cube map depending on the camera position, in order to better approximate how the acutal light rays would behave.
Here we implemented a loader for OBJ 3D model format.
Vertex buffer objects are used to handle all objcts that have more than a few vertices. Here this is used to repetitively inflate the model along the vertex normals, thus creating a glowing effect. Blending is used to handle the transparency of the multiple shells of the object.
The same cube map as before is used, however, here the normals of the objects normals are inverted. This creates the basic effect of transmission. Further scaling of these normals was used to offer a basic control of the index of refraction, although this is still a very simplified model.
Finally, a particle system was also implemented, together with an annimation system. Randomly colored particles are emitted from the different spheres. They are then subjected to different vector fileds that simulate a uniform force being applied to the particles. Dampened collisions were also implemented with the central sphere.