July 12, 2006 11:44 AM
Games had always caught my attention right from the Pac-Man days. No matter if it was the adventurous and stylish Lara Croft or the goofy Mario, gameplay was what held me glued to the screen. Awesome graphics were a plus, that was it. These days, most of us take mind blowing graphics and outstanding AI such as that featured in Black and White 2 for granted.
If you'd rather skip the commentary and find out what the fuss is all about, see Deskworld.
It is fascinating to study the evolution of games and note how they have advanced in both graphics and gameplay. Computer graphics is an exciting subject that never ceases to amaze with clever rasterization algorithms such as Bresenham's algorithm for plotting a line. Efficiency of algorithms can be observed visually as the cleverer the algorithm is, the faster the program will run. But how do you take it to the next step? How do you convert from a programmer and gamer to a creator of wonders, a game programmer? Well, there are plenty of websites out there that could help you1.
I must confess that it is this in-built passion for gaming that tempted me to toy with the idea of developing a game for my main project2. But since my teachers didn't approve of a game as a main project much, I stumbled upon an idea that did gain their approval. The proposal was to develop a 3D Desktop and File Explorer which would run on Windows and Linux. Though it sounds exciting, the project has not risen to my initial expectations even after 40,000 lines of C++ code and many sleepless nights. But there is one fact that makes it worthwhile: I enjoyed working on the project immensely.
Where were we? Ah, yes. The decision to go ahead with the project was made. My good friend Jijith agreed to the project as well and we began to spend most of our free time in the seventh semester learning about computer graphics (2D, 3D), opengl, etc. I found out about SDL and we decided to use that instead of glut. The first hurdle to starting OpenGL programming on Linux is video card drivers. You must have hardware accelerated OpenGL to get decent performance. Sadly, this means fooling around with Nvidia/ATI binary drivers that is a minor pain to install and setup. Once that is done, the enlightening can begin.
Names like John Carmack, Mark Kilgard, NeHe, etc. become second nature when you actively prowl the net for game programming related information. Carmack's early arguments (direct3d vs opengl)3 provide valuable insight into the situation the gaming industry was facing in '96 though the scenario has changed currently. Mark Kilgard's articles on reflection and shadows using opengl are easy to understand and implement. They are available on the usenet and shows how easily amazing things can be done in opengl. NeHe is a great resource for beginners and advanced programmers alike.
- 3D Desktop with shortcut menu.
- Process Launching, Killing and Status.
- 3D Visualization of Filesystem.
- Create Folder, Copy, Cut, Paste, Delete, Rename Files / Folders.
- Animated Copy / Paste to Clipboard.
- Preview few lines of text files with 3d text (Textured font).
- Preview picture files supported by SDL_image such PNG, JPG, GIF, etc.
- Play sound files supported by SDL_mixer such as OGG, MP3, WAV, etc.
- Scripting support via Lua. (work in progress, API not fully exported)
- Weather effects such as rain, lightning, day and night.
Screeshot 1 - 3D Desktop
Screeshot 2 - File Explorer
As you might have noticed, the artwork is still incomplete. Once that is done (volunteers, anyone?), the project will be published. The main limiting factor of this project is the fact that it is a pure application and does not work at the X server / Window manager level.
I'd love to hear any feedback regarding this project.
 This is not one of them.
 All engineering students are required to submit two projects: the mini and the main. The former has to be submitted at the sixth semester while the latter at the end of the course.
 Personally, I'd rather not comment on direct3d vs opengl as I haven't worked with direct3d at all. There was no choice for me since only opengl ran on linux.