Fileadelphia ============ Nikhil Marathe (200801011) and Shilpan Bhagat (200801162) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Introduction ------------ Fileadelphia is a 3-D file exploration system. When run the program puts the user in a city where the buildings are a visualization of the user's files and folders. The user can now navigate and teleport between cities. Usage ----- Starting Fileadelphia (main.py) will put you in the city generated based on your home directory. Fileadelphia has 4 attributes to make navigation easier. * File buildings are textured in a yellow, old style. * Folder buildings are textured in a blue, glass style. * The size of a building is proportional to the size of the file (except where the file is too small). * Accessing files and folders is done via the very intuitive action of entering the corresponding building. * File names are written on top of the building like billboards. Controls: To navigate in a city, use the mouse to control facing and: * W or Up arrow to move forward * S or Down arrow to move back * A or Left arrow to move left * D or Right arrow to move right. * Alt+Up arrow to move up the folder heirarchy. * Escape - quit the program at any time. Entering a file building will show information about the file. Clicking the "Launch!" button will start the file using the default system program. Press Enter or Space to exit the building. Entering a folder building will 'teleport' you to another city whose buildings correspond to the files in that folder. You may press Alt+Up arrow any time to go to the parent. If you enter a folder you aren't allowed to access, a Permission Denied error will be shown. Press Enter or Space to return to the parent. Improvements that can be done ----------------------------- If time permits we would like to add: * A skybox to give a more realistic city appearance. * Shader based fog in the city that can move behind along with the user, to keep certain areas out of focus. * Use OpenGL lighting to change amount of light in the city based on the time of the day. Dependencies ------------ Fileadelphia is written in Python, uses Pygame for event handling and raster text rendering, GL, GLU for transformations and drawing and GLUT for stroke based text rendering. Techniques used --------------- * Affine transformations * Camera system * Depth testing * Perspective projection for the 3d events * Ortho projection for text rendering * Texturing for buildings and floor * glutStrokeCharacter for file name drawing * Blending effect is used to go from one state to another. A special TransitionState handles the blend using `GL_CONSTANT_ALPHA` so that the source and destination states do not require special code. * Fog effect for start up screen. * Binary Space Partitioning using a Quadtree for efficient collision detection and display of the city. References ---------- We assert that all code in Fileadelphia was handwritten by us. Nevertheless certain resources were used for learning or inspiration. * Basic OpenGL initialization and texture rendering code was used by looking at programs in the lecture folder. * http://www.mindcontrol.org/~hplus/graphics/simple-gl-camera.html for an understanding of simple camera implementation. The pygame documentation was invaluable for OpenGL interoperatibility.