Fly

Fly was developed while I was attending computer graphic classes at the Polytechnical University of Catatonia (UPC). It was merely a schoolwork and not a real project, however it was quite complex because I had to implement from scratch an efficient 3D subsystem for real time visualization.

In fact, Fly was a real time flight simulator. It was originally based on X-Windows systems, but after starting the development on that environment and in front of the impossibility of debugging I ported it to Personal Computer and ended the development from there with Turbo Debugger. To accomplish that I re-implemented a subset of Xlib and OSF Motif calls under Turbo C so the actual code of Fly was exactly the same under both architectures.


Features

The final release ended up having many nice features and I was close to have a multi-user networked version, where many users could share a same environment. However I finally abandoned it because I started working as System Administrator in the Sala Silicon Graphics (UPC) and got involved with new projects.

Some of the supported features were:



3D Light

Maybe the most interesting feature of Fly was its realistic light simulation. It supported a real light simulation and all its changes through time, including smooth transitions between day and night modes. For example during the summer the sun used to come up from the East at 6am and go down to the West at 8pm.
Fly simulated the real light based on the actual date and time zone, trying to simulate real behaviors for northern hemisphere. For instance the sun was shining more hours during the summer and fewer hours during the winter, like in the real world.
During the night the sun was replaced by the moon with its weaker light and hence the scenes used to look darker.
The materials that were self illuminated glow in the dark giving the sensation of light sources. During the night the stars were also shining, they used to smoothly become visible after sunset and did not disappear until morning.


3D World

Fly was first implemented as a 2D flight simulator and then it was extended to 3D. That was part of the schoolwork plan but the transition was so hard that I had to find a shortcut to smooth that extension.
The 3D world was finally based on the Block's World concept. Only blocks could exist in the world and blocks could be positioned but with gravity awareness, they would fall until they reach the floor or they lay onto another block.
This simple premise made my life a lot easier and the extension from 2D to 3D could be done without a major code rewrite, it also speed up collision detection considerably.
Of course some flexibility was lost in the 3D editor, which was also used to build aircrafts. It could only build complex shapes made out from simpler ones, however it could do quite a decent job out from the more extravagant ideas. In the snapshot you see an example.


lucac@lsi.upc.es